Commit 2c27a627 by Marc Glisse Committed by Marc Glisse

optional (_Optional_base::_M_get): Check precondition.

2017-05-16  Marc Glisse  <marc.glisse@inria.fr>

	* include/std/optional (_Optional_base::_M_get): Check precondition.
	* testsuite/20_util/optional/cons/value_neg.cc: Update line numbers.

From-SVN: r248099
parent 322763f5
2017-05-16 Marc Glisse <marc.glisse@inria.fr>
* include/std/optional (_Optional_base::_M_get): Check precondition.
* testsuite/20_util/optional/cons/value_neg.cc: Update line numbers.
2017-05-16 Jonathan Wakely <jwakely@redhat.com>
* doc/xml/manual/appendix_contributing.xml: Link to test docs and
......
......@@ -386,11 +386,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// The _M_get operations have _M_engaged as a precondition.
constexpr _Tp&
_M_get() noexcept
{ return this->_M_payload._M_payload; }
{
__glibcxx_assert(_M_is_engaged());
return this->_M_payload._M_payload;
}
constexpr const _Tp&
_M_get() const noexcept
{ return this->_M_payload._M_payload; }
{
__glibcxx_assert(_M_is_engaged());
return this->_M_payload._M_payload;
}
// The _M_construct operation has !_M_engaged as a precondition
// while _M_destruct has _M_engaged as a precondition.
......
......@@ -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 { *-*-* } } 487 }
// { dg-error "no type" "" { target { *-*-* } } 497 }
// { dg-error "no type" "" { target { *-*-* } } 554 }
// { dg-error "no type" "" { target { *-*-* } } 493 }
// { dg-error "no type" "" { target { *-*-* } } 503 }
// { dg-error "no type" "" { target { *-*-* } } 560 }
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment