2017-05-08 Jonathan Wakely <jwakely@redhat.com>
+ * include/std/optional: Use a separate static_assert per condition.
+ * testsuite/20_util/optional/cons/value_neg.cc: Update dg-error line
+ numbers.
+
* doc/xml/manual/mt_allocator.xml: Clarify deallocation behaviour.
* doc/html/*: Regenerate.
// Unique tag type.
optional<_Tp>>
{
- static_assert(__and_<__not_<is_same<remove_cv_t<_Tp>, nullopt_t>>,
- __not_<is_same<remove_cv_t<_Tp>, in_place_t>>,
- __not_<is_reference<_Tp>>>(),
- "Invalid instantiation of optional<T>");
+ static_assert(!is_same_v<remove_cv_t<_Tp>, nullopt_t>);
+ static_assert(!is_same_v<remove_cv_t<_Tp>, in_place_t>);
+ static_assert(!is_reference_v<_Tp>);
private:
using _Base = _Optional_base<_Tp>;
constexpr _Tp
value_or(_Up&& __u) const&
{
- static_assert(__and_<is_copy_constructible<_Tp>,
- is_convertible<_Up&&, _Tp>>(),
- "Cannot return value");
+ static_assert(is_copy_constructible_v<_Tp>);
+ static_assert(is_convertible_v<_Up&&, _Tp>);
return this->_M_is_engaged()
? this->_M_get()
_Tp
value_or(_Up&& __u) &&
{
- static_assert(__and_<is_move_constructible<_Tp>,
- is_convertible<_Up&&, _Tp>>(),
- "Cannot return value" );
+ static_assert(is_move_constructible_v<_Tp>);
+ static_assert(is_convertible_v<_Up&&, _Tp>);
return this->_M_is_engaged()
? std::move(this->_M_get())
std::optional<std::unique_ptr<int>> oup2 = new int; // { dg-error "conversion" }
struct U { explicit U(std::in_place_t); };
std::optional<U> ou(std::in_place); // { dg-error "no matching" }
- // { dg-error "no type" "" { target { *-*-* } } 488 }
- // { dg-error "no type" "" { target { *-*-* } } 498 }
- // { dg-error "no type" "" { target { *-*-* } } 555 }
+ // { dg-error "no type" "" { target { *-*-* } } 487 }
+ // { dg-error "no type" "" { target { *-*-* } } 497 }
+ // { dg-error "no type" "" { target { *-*-* } } 554 }
}
}