Skip to content

Clang requires template keyword in places it should not (P0634, P1787) #95447

Open
@zygoloid

Description

@zygoloid

Testcase:

template<typename T> void F() {
  // Clang requires `typename` and `template`. As discussed later in this
  // issue, should require only `typename`.
  T::X<int> f();
}

template<typename T> class C {
  // Should require neither; clang requires `template` but not `typename`.
  T::X<int> g();
};

template<typename T>
// Should require neither; clang requires `template` but not `typename`.
T::X<int> h();

Under P1787 (DR against C++20), per [temp.names]/3, the template keyword is not required before X in g and h, following the same rules that P0634 established for type-only contexts. But Clang (and GCC) seems to not implement this, and still requires template in g and h.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions