7fb65a8759
A disabled specialization should not be callable, so move the function call operator into a new base class which correctly implements the disabled hash semantics. For the versioned namespace configuration do not derive from __poison_hash in the enabled case, as the empty base class serves no purpose but potentially increases the object size. For the default configuration that base class must be kept, to preserve layout. An enabled specialization should not be unconditionally noexcept, because the underlying hash object might throw. PR libstdc++/90388 * include/bits/unique_ptr.h (default_delete, default_delete<T[]>): Use _Require for constraints. (operator>(nullptr_t, const unique_ptr<T,D>&)): Implement exactly as per the standard. (__uniq_ptr_hash): New base class with conditionally-disabled call operator. (hash<unique_ptr<T,D>>): Derive from __uniq_ptr_hash. * testsuite/20_util/default_delete/48631_neg.cc: Adjust dg-error line. * testsuite/20_util/unique_ptr/hash/90388.cc: New test. From-SVN: r271078 |
||
---|---|---|
.. | ||
cons | ||
48631_neg.cc | ||
void_neg.cc |