https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109181

            Bug ID: 109181
           Summary: requires expression type requirement rejects valid
                    type when it is a nested member template
           Product: gcc
           Version: 10.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: waffl3x at protonmail dot com
  Target Milestone: ---

https://godbolt.org/z/5hG9Eqhc9

struct A {
    template<typename>
    using B = int;
};

inline constexpr bool go = requires{typename A::template B<int>;};

error: 'typename A::B' names 'template<class> using B = int', which is not a
type

I believe this is not a regression as the bug exists all the way back to 10.1
(assuming I understand what regression means)

Clang and MSVC accept this code, I assume GCC is incorrect since I couldn't
find anything specifying that a member template is not allowed, however I also
haven't found anything that specifies that it is allowed so I am not certain.

The behavior exists in all versions I checked since GCC 10.1

Reply via email to