https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107600

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2022-11-10 00:00:00         |2025-5-28

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I was reminded recently that the library currently uses
__has_trivial_destructor as part of std::is_trivially_destructible, which is
not an exact match for the semantics of the standard trait:

#include <type_traits>

struct D {
  ~D() = delete;
};

static_assert( __has_trivial_destructor(D) );
static_assert( not std::is_trivially_destructible_v<D> );


Also, Clang has deprecated __has_trivial_destructor in favour of their newer
__is_trivially_destructible built-in:

dest.cc:7:16: warning: builtin __has_trivial_destructor is deprecated; use
__is_trivially_destructible instead [-Wdeprecated-builtins]
    7 | static_assert( __has_trivial_destructor(D) );
      |                ^
1 warning generated.


So it would be nice if we had __is_trivially_destructible too, in addition to
__is_destructible and __is_nothrow_destructible.

Reply via email to