boost :: optional改变了一个隐式函数

时间:2016-08-02 08:56:55

标签: c++ boost optional

我正在使用VS2008,刚刚从1.51升级到1.61。不幸的是,我们决定改变boost::optional<T>并将演员阵容从可选项转换为bool,即下面的代码段不再有效

boost::optional<TYPE> optType;
TYPE t = default;
if (optType)
    t = optType;

您必须明确地将optType强制转换为bool才能使其发挥作用。

更不幸的是,这仍然编译(带有错误的结果),我无法检测它的使用位置。有没有人知道任何(甚至是侵入性的)方法来检测那些地方。

我试图在boost 1.51 hpp-file中将隐式强制转换标记为已弃用但由于某种原因编译器未显示任何警告。

我需要查看的代码量是几十万行,这就是我需要它的原因。

1 个答案:

答案 0 :(得分:1)

在您的特定代码段中,您只需编写

即可
boost::optional<TYPE> optType;
TYPE t = default;
if (optType)
    t = true;

但是,您的意思是获得TYPE值吗?

if (optType)
    t = *optType;

你也可以简单地

t = optType.get_value_or(default);