#include <type_traits>
struct MyType { void operator [](int) const {} };
template<typename T>
concept IsMyType1 = requires(T obj)
{
{ obj[0] };
using U = std::remove_cvref_t<T>; // error
requires std::is_same_v<U, MyType>;
};
template<typename T>
concept IsMyType2 = requires(T obj)
{
{ obj[0] };
requires std::is_same_v<std::remove_cvref_t<T>,
MyType>; // okay
};
int main() {}
Why doesn't C++20 allow type-alias in a requires-expression?