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.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| algorithm | Loading commit data... | |
| any | Loading commit data... | |
| array | Loading commit data... | |
| atomic | Loading commit data... | |
| bit | Loading commit data... | |
| bitset | Loading commit data... | |
| charconv | Loading commit data... | |
| chrono | Loading commit data... | |
| codecvt | Loading commit data... | |
| complex | Loading commit data... | |
| concepts | Loading commit data... | |
| condition_variable | Loading commit data... | |
| coroutine | Loading commit data... | |
| deque | Loading commit data... | |
| execution | Loading commit data... | |
| filesystem | Loading commit data... | |
| forward_list | Loading commit data... | |
| fstream | Loading commit data... | |
| functional | Loading commit data... | |
| future | Loading commit data... | |
| iomanip | Loading commit data... | |
| ios | Loading commit data... | |
| iosfwd | Loading commit data... | |
| iostream | Loading commit data... | |
| istream | Loading commit data... | |
| iterator | Loading commit data... | |
| limits | Loading commit data... | |
| list | Loading commit data... | |
| locale | Loading commit data... | |
| map | Loading commit data... | |
| memory | Loading commit data... | |
| memory_resource | Loading commit data... | |
| mutex | Loading commit data... | |
| numbers | Loading commit data... | |
| numeric | Loading commit data... | |
| optional | Loading commit data... | |
| ostream | Loading commit data... | |
| queue | Loading commit data... | |
| random | Loading commit data... | |
| ranges | Loading commit data... | |
| ratio | Loading commit data... | |
| regex | Loading commit data... | |
| scoped_allocator | Loading commit data... | |
| set | Loading commit data... | |
| shared_mutex | Loading commit data... | |
| span | Loading commit data... | |
| sstream | Loading commit data... | |
| stack | Loading commit data... | |
| stdexcept | Loading commit data... | |
| stop_token | Loading commit data... | |
| streambuf | Loading commit data... | |
| string | Loading commit data... | |
| string_view | Loading commit data... | |
| system_error | Loading commit data... | |
| thread | Loading commit data... | |
| tuple | Loading commit data... | |
| type_traits | Loading commit data... | |
| typeindex | Loading commit data... | |
| unordered_map | Loading commit data... | |
| unordered_set | Loading commit data... | |
| utility | Loading commit data... | |
| valarray | Loading commit data... | |
| variant | Loading commit data... | |
| vector | Loading commit data... | |
| version | Loading commit data... |