https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66218
--- Comment #3 from Casey Carter <Casey at Carter dot net> ---
Now this program compiles:
template <class T, class U>
concept bool Same = __is_same_as(T, U);
template <class T>
concept bool C =
requires {
{ 0 } -> Same<T>;
{ 3.14 } -> Same<T>;
{ nullptr } -> Same<T>;
{ "Hello, World!" } -> Same<T>;
};
template <C>
constexpr bool f() { return true; }
struct A {};
struct B {};
static_assert(f<double>(), "");
static_assert(f<int>(), "");
static_assert(f<void*>(), "");
static_assert(f<A>(), "");
static_assert(f<B>(), "");
static_assert(f<int(int)>(), "");
static_assert(f<int&&>(), "");
static_assert(f<int[][2]>(), "");
int main() {}
I'm pretty sure deduction constraints still aren't doing the right thing ;)