C++ Did boost::可选';他是不是想让布尔走开?

C++ Did boost::可选';他是不是想让布尔走开?,c++,boost,optional,C++,Boost,Optional,我开始将一个vc++10/boost 1.48代码库移植到vc++12/boost 1.57,我得到一个错误,boost::optional无法转换为bool。我认为这是boost::optional的一个特性,它被删除了吗 例如: bool fizz(){ boost::optional<int32_t> buzz; return buzz; } bool fizz(){ boost::可选嗡嗡声; 返回嗡嗡声; } 给予 Error 21错误C2440:“return

我开始将一个vc++10/boost 1.48代码库移植到vc++12/boost 1.57,我得到一个错误,boost::optional无法转换为bool。我认为这是boost::optional的一个特性,它被删除了吗

例如:

bool fizz(){
  boost::optional<int32_t> buzz;
  return buzz;
}
bool fizz(){
boost::可选嗡嗡声;
返回嗡嗡声;
}
给予

Error 21错误C2440:“return”:无法从“boost::optional”转换为“bool”
是。仍然使用:

,现在使用此宏:

BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
大致是:

#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
    explicit operator bool() const noexcept;
#else if !defined(BOOST_NO_UNSPECIFIED_BOOL)
    operator boost::detail::unspecified_bool_type () const noexcept;
#else
    operator bool () const noexcept;
#endif

我猜您没有定义
BOOST\u NO\u cx11\u EXPLICIT\u CONVERSION\u操作符
——而且由于您的编译器支持显式转换操作符,您可能应该保持这种方式

1.58的实施没有改变。它仍然使用宏。谢谢你的详细回答。让我知道宏是非常有用的,因为我们必须再支持半年左右的旧东西。你可以回来!!嗡嗡声@你可以的。或者你可以。。。显式地将其转换为
bool
,这对每个人来说都更容易理解。
BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
    explicit operator bool() const noexcept;
#else if !defined(BOOST_NO_UNSPECIFIED_BOOL)
    operator boost::detail::unspecified_bool_type () const noexcept;
#else
    operator bool () const noexcept;
#endif