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

Reply via email to