https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89345
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Author: redi Date: Wed Feb 13 22:13:45 2019 New Revision: 268856 URL: https://gcc.gnu.org/viewcvs?rev=268856&root=gcc&view=rev Log: PR libstdc++/89345 Only define std::destroying_delete for C++2a Clang defines the __cpp_impl_destroying_delete macro unconditionally, so that the feature is supported whenever the library type is defined. This is incompatible with the current definition in libstdc++ because we use constexpr and inline variables, which will give an error for older -std modes. This patch defines the destroying_delete_t type and destroying_delete variable independently of the __cpp_impl_destroying_delete macro, but only for C++2a (because the names aren't reserved for previous standards). The __cpp_lib_destroying_delete macro is only defined when both the library type and compiler macro are defined (i.e. when the type can actually be used as intended). PR libstdc++/89345 * include/std/version [__cpp_impl_destroying_delete] (__cpp_lib_destroying_delete): Only define for C++2a and later. * libsupc++/new [__cpp_impl_destroying_delete] (__cpp_lib_destroying_delete): Likewise. (destroying_delete_t, destroying_delete): Likewise, but define even when __cpp_impl_destroying_delete is not defined. * testsuite/18_support/destroying_delete.cc: New test. Added: trunk/libstdc++-v3/testsuite/18_support/destroying_delete.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/std/version trunk/libstdc++-v3/libsupc++/new