mirror of
https://github.com/boostorg/optional.git
synced 2025-07-24 09:37:27 +02:00
Use BOOST_EXPLICIT_OPERATOR_BOOL for optional
I often have the problem that when I change a std::wstring to boost::optional<std::wstring> and the variable is used as a parameter with Boost.Format, the result silently changes from the string contents to "1". This change prevents implicit conversion to bool if the compiler supports explicit conversion operators.
This commit is contained in:
committed by
Andrzej Krzemienski
parent
b4738ac07e
commit
c7cf80e5df
@ -29,5 +29,6 @@ import testing ;
|
||||
[ compile-fail optional_test_ref_fail4.cpp ]
|
||||
[ compile-fail optional_test_inplace_fail.cpp ]
|
||||
[ compile-fail optional_test_inplace_fail2.cpp ]
|
||||
[ compile-fail optional_test_fail_implicit_bool_convert.cpp ]
|
||||
;
|
||||
}
|
||||
|
@ -1086,8 +1086,8 @@ namespace optional_swap_test
|
||||
//
|
||||
void swap(boost::optional<class_whose_explicit_ctor_should_be_used> & x, boost::optional<class_whose_explicit_ctor_should_be_used> & y)
|
||||
{
|
||||
bool hasX = x;
|
||||
bool hasY = y;
|
||||
bool hasX(x);
|
||||
bool hasY(y);
|
||||
|
||||
if ( !hasX && !hasY )
|
||||
return;
|
||||
|
28
test/optional_test_fail_implicit_bool_convert.cpp
Normal file
28
test/optional_test_fail_implicit_bool_convert.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
// Copyright (C) 2014, Andrzej Krzemienski.
|
||||
//
|
||||
// Use, modification, and distribution is subject to the Boost Software
|
||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
// See http://www.boost.org/lib/optional for documentation.
|
||||
//
|
||||
// You are welcome to contact the author at:
|
||||
// akrzemi1@gmail.com
|
||||
//
|
||||
#include "boost/optional.hpp"
|
||||
|
||||
//
|
||||
// THIS TEST SHOULD FAIL TO COMPILE
|
||||
//
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
|
||||
|
||||
bool test_implicit_conversion_to_bool()
|
||||
{
|
||||
boost::optional<int> opt;
|
||||
return opt;
|
||||
}
|
||||
|
||||
#else
|
||||
# error "Test skipped: this compiler does not support explicit conversion operators."
|
||||
#endif
|
Reference in New Issue
Block a user