aboutsummaryrefslogtreecommitdiff
path: root/gcc/objcp/objcp-lang.c
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-03-18 23:19:12 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-03-18 23:19:35 +0000
commitb3341826531e80e02f194460b4fbe1b0541c0463 (patch)
tree9c228923d0a965edfd8aecbed34a3f89f67e363e /gcc/objcp/objcp-lang.c
parent07fe4af4d51d74b63a76ea632d4db01d1f69f037 (diff)
downloadgcc-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