// { dg-do compile { target c++11 } } #include // 2762. unique_ptr operator*() should be noexcept static_assert( noexcept(*std::declval>()), "LWG 2762" ); template struct deleter { struct pointer { int& operator*() && noexcept(B); // this is used by unique_ptr int& operator*() const& = delete; // this should not be int* operator->() noexcept(false); // noexcept here doesn't affect anything // Needed for NullablePointer requirements pointer(int* = nullptr); bool operator==(const pointer&) const noexcept; bool operator!=(const pointer&) const noexcept; }; void operator()(pointer) const noexcept { } }; template using UPtr = std::unique_ptr>; // noexcept-specifier depends on the pointer type static_assert( noexcept(*std::declval&>()), "LWG 2762" ); static_assert( ! noexcept(*std::declval&>()), "LWG 2762" ); // This has always been required, even in C++11. static_assert( noexcept(std::declval>().operator->()), "operator-> is always noexcept" ); static_assert( noexcept(std::declval&>().operator->()), "operator-> is always noexcept" );