diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-03-18 23:19:12 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-03-18 23:19:35 +0000 |
commit | b3341826531e80e02f194460b4fbe1b0541c0463 (patch) | |
tree | 9c228923d0a965edfd8aecbed34a3f89f67e363e /gcc/objcp/objcp-lang.c | |
parent | 07fe4af4d51d74b63a76ea632d4db01d1f69f037 (diff) | |
download | gcc-b3341826531e80e02f194460b4fbe1b0541c0463.zip gcc-b3341826531e80e02f194460b4fbe1b0541c0463.tar.gz gcc-b3341826531e80e02f194460b4fbe1b0541c0463.tar.bz2 |
libstdc++: Fix is_trivially_constructible (PR 94033)
This attempts to make is_nothrow_constructible more robust (and
efficient to compile) by not depending on is_constructible. Instead the
__is_constructible intrinsic is used directly. The helper class
__is_nt_constructible_impl which checks whether the construction is
non-throwing now takes a bool template parameter that is substituted by
the result of the instrinsic. This fixes the reported bug by not using
the already-instantiated (and incorrect) value of std::is_constructible.
I don't think it really fixes the problem in general, because
std::is_nothrow_constructible itself could already have been
instantiated in a context where it gives the wrong result. A proper fix
needs to be done in the compiler.
PR libstdc++/94033
* include/std/type_traits (__is_nt_default_constructible_atom): Remove.
(__is_nt_default_constructible_impl): Remove.
(__is_nothrow_default_constructible_impl): Remove.
(__is_nt_constructible_impl): Add bool template parameter. Adjust
partial specializations.
(__is_nothrow_constructible_impl): Replace class template with alias
template.
(is_nothrow_default_constructible): Derive from alias template
__is_nothrow_constructible_impl instead of
__is_nothrow_default_constructible_impl.
* testsuite/20_util/is_nothrow_constructible/94003.cc: New test.
Diffstat (limited to 'gcc/objcp/objcp-lang.c')
0 files changed, 0 insertions, 0 deletions