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

use*_*072 3 c++ namespaces std c++11

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

我可以解决这个问题吗?

否则我怎样才能使我的代码可移植?

注意:我在 Android 上使用 Termux Linux 模拟器中的 clang。我通过安装它得到了铿锵声apt

eer*_*ika 5

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;
}
Run Code Online (Sandbox Code Playgroud)