https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71579
--- Comment #9 from Antony Polukhin <antoshkka at gmail dot com> --- (In reply to Jonathan Wakely from comment #8) > Is there more work to do to support the whole of https://wg21.link/lwg2797 ? Looks like I've missed the is_nothrow_invocable_r, is_convertible, is_nothrow_convertible, is_swappable_with, is_nothrow_swappable_with. I'll add static asserts in a separate patch. is_base_of is a hard one. But doable. Non first template arguments of some traits could be hardened further. However there are doubts about hardening those and especially the `R` parameter of the is_*invocable_r traits: #include <type_traits> struct X; struct foo{ X operator()(X&, X&); }; // OK on GCC and Clang constexpr bool r0 = std::is_invocable_r<X, foo>::value; struct Y { Y& operator=(X ); }; // OK on GCC, ill-formed on clang constexpr bool r1 = std::is_assignable<Y, X>::value; I'm not sure what to do. We may harden those and make the behavior match the Comments/Preconditions columns in the [meta.*], or relax those preconditions in the WD, or do nothing and leave it as is. Right now I'm in favor of the second approach.