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