我在源文件中包含了<utility>
。然后我使用了std::exchange
,但是编译器说它没有在命名空间std中找到exchange
。我查看了usr/include/utility
,通过搜索exchange
找到了实现,它在namespace std
块中。为了使代码编译,我不得不从std::
中删除std::exchange
。
我能解决这个问题吗?
否则如何使我的代码可移植?
注意:我正在使用Android上Termux仿真器中的clang。我用apt
安装它,获得了巨大的成功。
发布于 2017-01-12 14:04:57
std::exchange
是在C++14中引入的,如果您使用C++11,那么它就不是标准提供的。
解决方案:使用与C++14兼容的实现(这可能需要显式地启用支持,这取决于它是否是默认的)。
否则如何使我的代码可移植?
你可以自己实现它。下面是优先选择的一个可能的实现。
template T exchange(T& obj,U& new_value) {T old_value = std::move( obj );obj= std::forward(new_value);返回old_value};
https://stackoverflow.com/questions/41615077
复制相似问题