Catching up with N4078

This commit is contained in:
Andrzej Krzemienski
2014-06-28 00:31:36 +02:00
parent c7200c4aed
commit 18b8c4bb18
9 changed files with 131 additions and 89 deletions

View File

@ -19,8 +19,9 @@ namespace boost {
class bad_optional_access : public std::logic_error
{
public:
explicit bad_optional_access(const std::string& what_arg) : std::logic_error(what_arg) {}
explicit bad_optional_access(const char* what_arg) : std::logic_error(what_arg) {}
bad_optional_access()
: std::logic_error("Attempted to access the value of an uninitialized optional object.")
{}
};
} // namespace boost

View File

@ -1005,13 +1005,16 @@ class optional : public optional_detail::optional_base<T>
// the behaviour is UNDEFINED
// No-throw
#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
reference_const_type operator *() const& { return this->get() ; }
reference_type operator *() & { return this->get() ; }
value_type operator *() && { return boost::move(this->get()) ; }
reference_const_type operator *() const& { return this->get() ; }
reference_type operator *() & { return this->get() ; }
value_type operator *() && { return boost::move(this->get()) ; }
#ifdef BOOST_CLANG
value_type operator *() const&& { return boost::move(this->get()) ; }
#endif
#else
reference_const_type operator *() const { return this->get() ; }
reference_type operator *() { return this->get() ; }
#endif
#endif // !defined BOOST_NO_CXX11_REF_QUALIFIERS
#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
reference_const_type value() const&
@ -1019,7 +1022,7 @@ class optional : public optional_detail::optional_base<T>
if (this->is_initialized())
return this->get() ;
else
throw_exception(bad_optional_access("Attempted to access the value of an uninitialized optional object."));
throw_exception(bad_optional_access());
}
reference_type value() &
@ -1027,7 +1030,7 @@ class optional : public optional_detail::optional_base<T>
if (this->is_initialized())
return this->get() ;
else
throw_exception(bad_optional_access("Attempted to access the value of an uninitialized optional object."));
throw_exception(bad_optional_access());
}
value_type value() &&
@ -1035,15 +1038,25 @@ class optional : public optional_detail::optional_base<T>
if (this->is_initialized())
return boost::move(this->get()) ;
else
throw_exception(bad_optional_access("Attempted to access the value of an uninitialized optional object."));
throw_exception(bad_optional_access());
}
#ifdef BOOST_CLANG
value_type value() const&&
{
if (this->is_initialized())
return boost::move(this->get()) ;
else
throw_exception(bad_optional_access());
}
#endif
#else
reference_const_type value() const
{
if (this->is_initialized())
return this->get() ;
else
throw_exception(bad_optional_access("Attempted to access the value of an uninitialized optional object."));
throw_exception(bad_optional_access());
}
reference_type value()
@ -1051,7 +1064,7 @@ class optional : public optional_detail::optional_base<T>
if (this->is_initialized())
return this->get() ;
else
throw_exception(bad_optional_access("Attempted to access the value of an uninitialized optional object."));
throw_exception(bad_optional_access());
}
#endif