https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68434
--- Comment #5 from ryan.burn at gmail dot com --- reduction for the other test case: template <typename, typename> struct is_same { static constexpr bool value = true; }; template <typename T, typename U> concept bool Same = is_same<T, U>::value; template <typename T> concept bool Integral = requires{ { T() } -> Same<typename T::value_type>; }; struct A { using value_type = bool; }; template <Integral B> using not_ = A; int main() { Integral<not_<A>>; return 0; }