【发布时间】:2017-06-20 06:40:19
【问题描述】:
在尝试构建一些遗留代码(使用最新版本的 boost)时,我偶然发现了以下问题:
#include <boost/scoped_array.hpp>
bool foo(const boost::scoped_array<int> bar) {
return bar;
}
bool foo2(const boost::scoped_array<int> bar) {
const bool r = bar;
return r;
}
bool foo3(const boost::scoped_array<int> bar) {
return bar ? true : false;
}
上面的源码不会编译。 foo 和 foo2 都是错误的。准确地说,不允许预期的从 scoped_array 到 bool 的隐式转换:
➜ /tmp clang++ --std=c++14 testconversion.cpp -o testconversion.o
testconversion.cpp:4:12: error: no viable conversion from returned value of type 'const boost::scoped_array<int>' to function return type 'bool'
return bar;
^~~
testconversion.cpp:8:16: error: no viable conversion from 'const boost::scoped_array<int>' to 'const bool'
const bool r = bar;
这带来了两个问题:
- 为什么 foo 和 foo2 无效? reference 明确提到:
在初始化 T2 类型的新对象时,包括返回 返回 T2 的函数中的语句;
- 什么时候合法。遗留代码肯定用于使用 boost 1.48.0 构建。有没有
- boost 库的变化
- 更改语言/编译器
【问题讨论】:
-
所以编译器说'错误'?
-
更多的话。
-
你不想打扰我们吗?
-
查看我所做的编辑
标签: c++ boost implicit-conversion