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.

Reply via email to