This code won't compile on any C++ complaint compiler (Clang, GCC, MSVC):
template<typename T>
requires(T t) { typename T::name; }
class MyVector
{
};
The error(s):
--- Clang ----
<source>:9:14: error: 'T' does not refer to a value
requires(T t) { typename T::name; }
^
<source>:8:19: note: declared here
template<typename T>
^
--- GCC ----
<source>:9:16: error: expected primary-expression before 't'
9 | requires(T t) { typename T::name; }
--- MSVC ----
<source>(9): error C2760: syntax error: 't' was unexpected here; expected ')'
<source>(9): error C2059: syntax error: ')'
But this will:
template<typename T>
requires std::is_integral_v<T> &&
requires(T t) { typename T::name; }
class MyVector{};
Interestingly, this will also compile fine!
template<typename T>
requires true &&
requires(T t) { typename T::name; }
class MyVector{};
I am aware concept
can be used instead, but was trying requires
alone.