我的std::exchange不在命名空间std中
My std::exchange is not in namespace std?
我在源文件中包含了<utility>
。然后我使用了std::exchange
,但编译器说它在命名空间std中没有找到exchange
。我查看了usr/include/utility
,通过搜索exchange
我找到了实现,它在namespace std
块中。我不得不从std::exchange
中删除std::
来编译代码。
我能解决这个问题吗?
否则,我如何使我的代码可移植?
注意:我使用的是安卓系统上Termux linux模拟器中的clang。我把它和apt
一起安装,弄得叮当作响。
std::exchange
是在C++14中引入的。如果您使用C++11,则该标准不提供它。
解决方案:使用符合C++14的实现(这可能需要显式启用支持,具体取决于它是否是默认的)。
否则我如何使我的代码可移植?
您可以自己实现它。以下是来自cppreference的一个可能的实现。
template<class T, class U = T> T exchange(T& obj, U&& new_value) { T old_value = std::move(obj); obj = std::forward<U>(new_value); return old_value; }
相关文章:
- 我可以在"std"命名空间中添加推理指南吗?
- 哪些C结构出现在std命名空间中
- 为什么在这种特殊情况下不需要将 std::hash() 的专用化注入到 std 命名空间中?
- 即使在包含 std 命名空间之后,fstream 在 Visual Studio 2017 中也无法正常工作
- 从 std 命名空间中专门化函数模板的想法有多糟糕?
- 范围运算符需要查找 std 命名空间而不是提升
- C++ 什么时候可以扩展"std"命名空间?
- 如何跳过调试 Visual C++ 2013 中的所有 std 命名空间
- C++余弦在没有 std 命名空间的情况下工作 - 为什么
- 为什么我的日志在 std 命名空间中
- ctime std::命名空间冲突
- 为什么某些函数<cmath>不在 std 命名空间中?
- 在单步执行 std::function 调用时,如何跳过 std 命名空间中的方法调用?(使用 GDB
- 使用 std 命名空间,为什么(或为什么不)我应该在 std:: 前面加上前缀
- isnan 是否在 std:: 命名空间中?更一般地说,何时是 std::必要、可选或要避免
- 在std命名空间中添加模板专用化
- Eclipse CDT插件无法识别某些文件中的std命名空间
- Xcode 找不到'std'命名空间
- 在查找期间在std命名空间中拖动外部命名空间
- 为什么 setjmp 在包含 时不在 std 命名空间中?<csetjmp>