我的std :: exchange不在命名空间std中?

时间:2017-01-12 13:59:44

标签: c++ c++11 namespaces std

我在源文件中包含了<utility>。然后我使用了std::exchange,但编译器说它没有在命名空间std中找到exchange。我查看了usr/include/utility,通过搜索exchange我找到了实现,它位于namespace std块内。我必须从std::中删除std::exchange以使代码编译。

我能解决这个问题吗?

如何以其他方式使我的代码可移植?

注意:我在Android上使用来自Termux linux模拟器的clang。我用apt安装了它。

1 个答案:

答案 0 :(得分:2)

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;
}