forked from boostorg/optional
Fix some -Wmaybe-uninitialized warnings
This commit is contained in:
@ -67,9 +67,9 @@ void prevent_binding_rvalue_ref_to_optional_lvalue_ref()
|
||||
{
|
||||
#ifndef BOOST_OPTIONAL_CONFIG_ALLOW_BINDING_TO_RVALUES
|
||||
BOOST_STATIC_ASSERT_MSG(
|
||||
!boost::is_lvalue_reference<To>::value || !boost::is_rvalue_reference<From>::value,
|
||||
!boost::is_lvalue_reference<To>::value || !boost::is_rvalue_reference<From>::value,
|
||||
"binding rvalue references to optional lvalue references is disallowed");
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
struct optional_tag {} ;
|
||||
@ -222,7 +222,7 @@ class optional_base : public optional_tag
|
||||
construct(rhs.get_impl());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
// Assigns from another optional<T> (deep-moves the rhs value)
|
||||
void assign ( optional_base&& rhs )
|
||||
@ -239,7 +239,7 @@ class optional_base : public optional_tag
|
||||
construct(boost::move(rhs.get_impl()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Assigns from another _convertible_ optional<U> (deep-copies the rhs value)
|
||||
template<class U>
|
||||
@ -253,7 +253,7 @@ class optional_base : public optional_tag
|
||||
#else
|
||||
assign_value(static_cast<value_type>(rhs.get()), is_reference_predicate() );
|
||||
#endif
|
||||
|
||||
|
||||
else destroy();
|
||||
}
|
||||
else
|
||||
@ -286,7 +286,7 @@ class optional_base : public optional_tag
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// Assigns from a T (deep-copies the rhs value)
|
||||
void assign ( argument_type val )
|
||||
{
|
||||
@ -294,7 +294,7 @@ class optional_base : public optional_tag
|
||||
assign_value(val, is_reference_predicate() );
|
||||
else construct(val);
|
||||
}
|
||||
|
||||
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
// Assigns from a T (deep-moves the rhs value)
|
||||
void assign ( rval_reference_type val )
|
||||
@ -355,7 +355,7 @@ class optional_base : public optional_tag
|
||||
::new (m_storage.address()) internal_type(val) ;
|
||||
m_initialized = true ;
|
||||
}
|
||||
|
||||
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
void construct ( rval_reference_type val )
|
||||
{
|
||||
@ -383,7 +383,7 @@ class optional_base : public optional_tag
|
||||
::new (m_storage.address()) internal_type( boost::forward<Arg>(arg) );
|
||||
m_initialized = true ;
|
||||
}
|
||||
|
||||
|
||||
void emplace_assign ()
|
||||
{
|
||||
destroy();
|
||||
@ -398,7 +398,7 @@ class optional_base : public optional_tag
|
||||
::new (m_storage.address()) internal_type( arg );
|
||||
m_initialized = true ;
|
||||
}
|
||||
|
||||
|
||||
template<class Arg>
|
||||
void emplace_assign ( Arg& arg )
|
||||
{
|
||||
@ -406,7 +406,7 @@ class optional_base : public optional_tag
|
||||
::new (m_storage.address()) internal_type( arg );
|
||||
m_initialized = true ;
|
||||
}
|
||||
|
||||
|
||||
void emplace_assign ()
|
||||
{
|
||||
destroy();
|
||||
@ -615,8 +615,8 @@ class optional_base : public optional_tag
|
||||
#endif
|
||||
|
||||
// reference_content<T> lacks an implicit conversion to T&, so the following is needed to obtain a proper reference.
|
||||
reference_const_type dereference( internal_type const* p, is_not_reference_tag ) const { return *p ; }
|
||||
reference_type dereference( internal_type* p, is_not_reference_tag ) { return *p ; }
|
||||
reference_const_type dereference( internal_type const* p, is_not_reference_tag ) const { return *boost::core::launder(p) ; }
|
||||
reference_type dereference( internal_type* p, is_not_reference_tag ) { return *boost::core::launder(p) ; }
|
||||
reference_const_type dereference( internal_type const* p, is_reference_tag ) const { return p->get() ; }
|
||||
reference_type dereference( internal_type* p, is_reference_tag ) { return p->get() ; }
|
||||
|
||||
@ -677,7 +677,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
// Creates an optional<T> initialized with 'move(val)'.
|
||||
// Can throw if T::T(T &&) does
|
||||
optional ( rval_reference_type val ) : base( boost::forward<T>(val) )
|
||||
optional ( rval_reference_type val ) : base( boost::forward<T>(val) )
|
||||
{optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, rval_reference_type>();}
|
||||
#endif
|
||||
|
||||
@ -698,7 +698,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
if ( rhs.is_initialized() )
|
||||
this->construct(rhs.get());
|
||||
}
|
||||
|
||||
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
// Creates a deep move of another convertible optional<U>
|
||||
// Requires a valid conversion from U to T.
|
||||
@ -727,12 +727,12 @@ class optional : public optional_detail::optional_base<T>
|
||||
|
||||
|
||||
template<class Expr>
|
||||
explicit optional ( Expr&& expr,
|
||||
explicit optional ( Expr&& expr,
|
||||
BOOST_DEDUCED_TYPENAME boost::disable_if_c<
|
||||
(boost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type>::value) ||
|
||||
boost::is_same<BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type, none_t>::value, bool >::type = true
|
||||
)
|
||||
: base(boost::forward<Expr>(expr),boost::addressof(expr))
|
||||
(boost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type>::value) ||
|
||||
boost::is_same<BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type, none_t>::value, bool >::type = true
|
||||
)
|
||||
: base(boost::forward<Expr>(expr),boost::addressof(expr))
|
||||
{optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, Expr&&>();}
|
||||
|
||||
#else
|
||||
@ -764,10 +764,10 @@ class optional : public optional_detail::optional_base<T>
|
||||
|
||||
template<class Expr>
|
||||
BOOST_DEDUCED_TYPENAME boost::disable_if_c<
|
||||
boost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type>::value ||
|
||||
boost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type>::value ||
|
||||
boost::is_same<BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type, none_t>::value,
|
||||
optional&
|
||||
>::type
|
||||
>::type
|
||||
operator= ( Expr&& expr )
|
||||
{
|
||||
optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, Expr&&>();
|
||||
@ -794,7 +794,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
this->assign(rhs);
|
||||
return *this ;
|
||||
}
|
||||
|
||||
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
// Move-assigns from another convertible optional<U> (converts && deep-moves the rhs value)
|
||||
// Requires a valid conversion from U to T.
|
||||
@ -818,7 +818,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
|
||||
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
// Assigns from another optional<T> (deep-moves the rhs value)
|
||||
optional& operator= ( optional && rhs )
|
||||
optional& operator= ( optional && rhs )
|
||||
BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && ::boost::is_nothrow_move_assignable<T>::value)
|
||||
{
|
||||
this->assign( static_cast<base &&>(rhs) ) ;
|
||||
@ -852,7 +852,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
this->assign( none_ ) ;
|
||||
return *this ;
|
||||
}
|
||||
|
||||
|
||||
#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||
// Constructs in-place
|
||||
// upon exception *this is always uninitialized
|
||||
@ -867,7 +867,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
{
|
||||
this->emplace_assign( boost::forward<Arg>(arg) );
|
||||
}
|
||||
|
||||
|
||||
void emplace ()
|
||||
{
|
||||
this->emplace_assign();
|
||||
@ -878,13 +878,13 @@ class optional : public optional_detail::optional_base<T>
|
||||
{
|
||||
this->emplace_assign( arg );
|
||||
}
|
||||
|
||||
|
||||
template<class Arg>
|
||||
void emplace ( Arg& arg )
|
||||
{
|
||||
this->emplace_assign( arg );
|
||||
}
|
||||
|
||||
|
||||
void emplace ()
|
||||
{
|
||||
this->emplace_assign();
|
||||
@ -918,7 +918,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
// Returns a reference to the value if this is initialized, otherwise,
|
||||
// the behaviour is UNDEFINED
|
||||
// No-throw
|
||||
#if (!defined BOOST_NO_CXX11_REF_QUALIFIERS) && (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
|
||||
#if (!defined BOOST_NO_CXX11_REF_QUALIFIERS) && (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
|
||||
reference_const_type operator *() const& { return this->get() ; }
|
||||
reference_type operator *() & { return this->get() ; }
|
||||
reference_type_of_temporary_wrapper operator *() && { return base::types::move(this->get()) ; }
|
||||
@ -927,42 +927,42 @@ class optional : public optional_detail::optional_base<T>
|
||||
reference_type operator *() { return this->get() ; }
|
||||
#endif // !defined BOOST_NO_CXX11_REF_QUALIFIERS
|
||||
|
||||
#if (!defined BOOST_NO_CXX11_REF_QUALIFIERS) && (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
|
||||
#if (!defined BOOST_NO_CXX11_REF_QUALIFIERS) && (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
|
||||
reference_const_type value() const&
|
||||
{
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return this->get() ;
|
||||
else
|
||||
throw_exception(bad_optional_access());
|
||||
}
|
||||
|
||||
|
||||
reference_type value() &
|
||||
{
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return this->get() ;
|
||||
else
|
||||
throw_exception(bad_optional_access());
|
||||
}
|
||||
|
||||
|
||||
reference_type_of_temporary_wrapper value() &&
|
||||
{
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return base::types::move(this->get()) ;
|
||||
else
|
||||
throw_exception(bad_optional_access());
|
||||
}
|
||||
|
||||
#else
|
||||
#else
|
||||
reference_const_type value() const
|
||||
{
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return this->get() ;
|
||||
else
|
||||
throw_exception(bad_optional_access());
|
||||
}
|
||||
|
||||
|
||||
reference_type value()
|
||||
{
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return this->get() ;
|
||||
else
|
||||
@ -974,16 +974,16 @@ class optional : public optional_detail::optional_base<T>
|
||||
#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
|
||||
template <class U>
|
||||
value_type value_or ( U&& v ) const&
|
||||
{
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return get();
|
||||
else
|
||||
return boost::forward<U>(v);
|
||||
}
|
||||
|
||||
|
||||
template <class U>
|
||||
value_type value_or ( U&& v ) &&
|
||||
{
|
||||
value_type value_or ( U&& v ) &&
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return base::types::move(get());
|
||||
else
|
||||
@ -991,7 +991,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
}
|
||||
#elif !defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||
template <class U>
|
||||
value_type value_or ( U&& v ) const
|
||||
value_type value_or ( U&& v ) const
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return get();
|
||||
@ -1000,17 +1000,17 @@ class optional : public optional_detail::optional_base<T>
|
||||
}
|
||||
#else
|
||||
template <class U>
|
||||
value_type value_or ( U const& v ) const
|
||||
{
|
||||
value_type value_or ( U const& v ) const
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return get();
|
||||
else
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
template <class U>
|
||||
value_type value_or ( U& v ) const
|
||||
{
|
||||
value_type value_or ( U& v ) const
|
||||
{
|
||||
if (this->is_initialized())
|
||||
return get();
|
||||
else
|
||||
@ -1028,7 +1028,7 @@ class optional : public optional_detail::optional_base<T>
|
||||
else
|
||||
return f();
|
||||
}
|
||||
|
||||
|
||||
template <typename F>
|
||||
value_type value_or_eval ( F f ) &&
|
||||
{
|
||||
@ -1047,9 +1047,9 @@ class optional : public optional_detail::optional_base<T>
|
||||
return f();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
bool operator!() const BOOST_NOEXCEPT { return !this->is_initialized() ; }
|
||||
|
||||
|
||||
BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
|
||||
} ;
|
||||
|
||||
|
Reference in New Issue
Block a user