C ++ std :: swap无效参数

时间:2018-10-17 17:26:27

标签: c++ c++11

我一直在尝试在C ++中使用std::swap函数:

#include <iostream>

int main(int argc, char * argv[]){
    int i(2);
    int j(3);
    std::cout << i << std::endl << j << std::endl;
    using std::swap;
    swap(i,j);
    std::cout << i << std::endl << j << std::endl;
}

但是我无法弄清楚为什么在交换功能下的编辑器中有此错误消息:

Invalid arguments '
Candidates are:
std::enable_if<74 0 value 14 std::__and_ 3 14 std::__not_ 1 14 std::__is_tuple_like 1 #0 14 std::is_move_constructible 1 #0 14 std::is_move_assignable 1 #074 0 value 14 std::__and_ 3 14 std::__not_ 1 14 std::__is_tuple_like 1 #0 14 std::is_move_constructible 1 #0 14 std::is_move_assignable 1 #0,void>::type swap(#0 &, #0 &)
std::enable_if<74 0 value 14 std::__and_ 2 14 std::__is_swappable 1 #0 14 std::__is_swappable 1 #174 0 value 14 std::__and_ 2 14 std::__is_swappable 1 #0 14 std::__is_swappable 1 #1,void>::type swap(std::pair<#0,#1> &, std::pair<#0,#1> &)
std::enable_if<bool15 7 74 0 value 14 std::__and_ 2 14 std::__is_swappable 1 #0 14 std::__is_swappable 1 #1 0,void>::type swap(std::pair<#0,#1> &, std::pair<#0,#1> &)
void swap(std::__cxx11::basic_string<#0,#1,#2> &, std::__cxx11::basic_string<#0,#1,#2> &)
std::enable_if<74 0 value 14 std::__is_swappable 1 #074 0 value 14 std::__is_swappable 1 #0,void>::type swap(#0 (&)[3 #1 0], #0 (&)[3 #1 0])
'

尤其奇怪的是,它仅出现在编辑器中,但是当我执行时,它似乎可以正常工作。

我尝试过多次重新启动,还尝试了不同类型的对象,但没有任何改变。

我正在Windows上使用带有MinGW工具链的Eclipse。

1 个答案:

答案 0 :(得分:1)

std::swap在标头<utility>中定义。首先包含标题,这将成功。

错误中显示的重载似乎引用了其他std::swap实现,可以通过包含<iostream>来看到它们。例如,在std::swap中定义了std::__cxx11::basic_stringstd::string)的<string>-而您对<iostream>的实现可能包含string(或在{至少向前声明了相关部分)作为其实现的一部分,这使得swap重载可见。