blob: a0cf0bc19a03497c130a7eae9c0389b1fb5066e5 [file] [log] [blame]
// { dg-do compile { target c++17 } }
// LWG 2762 adds noexcept to operator-> and operator*
#include <optional>
struct S
{
void can_throw();
void cannot_throw() noexcept;
};
static_assert( ! noexcept(std::declval<std::optional<S>&>()->can_throw()) );
static_assert( noexcept(std::declval<std::optional<S>&>()->cannot_throw()) );
static_assert( noexcept(std::declval<std::optional<S>&>().operator->()) );
static_assert( noexcept(std::declval<std::optional<int>&>().operator->()) );
static_assert( noexcept(*std::declval<std::optional<int>&>()) );
static_assert( noexcept(*std::declval<const std::optional<int>&>()) );
static_assert( noexcept(*std::declval<std::optional<int>&&>()) );
static_assert( noexcept(*std::declval<const std::optional<int>&&>()) );