Why doesn't C++20 allow type-alias in a requires-expression?

459 Views Asked by At
#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?

0

There are 0 best solutions below