gpt4 book ai didi

c++ - 出于 std::is_convertible 的目的,为什么 boost::optional 不能转换为 bool

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:47 26 4
gpt4 key购买 nike

我有

auto result = std::is_convertible
< boost::optional<int>
, bool
>::value;

static_assert( result , "task should return bool" );

编译失败。 std::is_convertible的定义是

template< class From, class To > struct is_convertible;

而且 optional 显然可以转换为 bool 值,因为我们总是像这样使用它

void(boost::optional<int> const & value){
if(value){
std::cerr << *value << endl;
}
}

我在这里错过了什么?

最佳答案

boost::optionaloperator bool明确的。它在 if 的条件下工作,因为它是 contextual conversion .

你需要std::is_constructible ,它会尝试执行显式转换。

编译如下

static_assert
( std::is_constructible<bool, boost::optional<int>>::value
, "msg" );

下面的编译失败,因为 optional 不能转换为 int

static_assert
( std::is_constructible<int, boost::optional<int>>::value
, "msg" );

关于c++ - 出于 std::is_convertible 的目的,为什么 boost::optional<T> 不能转换为 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53319240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com