Tweak static assertions in std::optional
* include/std/optional: Use a separate static_assert per condition. * testsuite/20_util/optional/cons/value_neg.cc: Update dg-error line numbers. From-SVN: r247748
This commit is contained in:
parent
7574e45845
commit
9057edd30c
3 changed files with 14 additions and 13 deletions
|
@ -1,5 +1,9 @@
|
|||
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.
|
||||
|
||||
|
|
|
@ -462,10 +462,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
// 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>;
|
||||
|
@ -756,9 +755,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
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()
|
||||
|
@ -769,9 +767,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_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())
|
||||
|
|
|
@ -37,8 +37,8 @@ int main()
|
|||
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 }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue