考虑以下代码:
#include<iostream>
#include<vector>
using namespace std;
class Foo {
public:
template< typename T>
operator vector< T >() const {
return vector< T >();
}
template< typename T>
operator T() const {
return T();
}
};
int main () {
Foo b;
vector< int > q = b;
q = b;
}
使用 Clang 或 g++ 使用以下两个命令之一进行编译:
g++ test.cpp
clang++ test.cpp
但是,启用 C++11 功能会失败:
g++ --std=c++0x test.cpp
clang++ --std=c++11 test.cpp
错误信息如下:
test.cpp:20:5: error: use of overloaded operator '=' is ambiguous (with operand types 'vector<int>' and 'Foo')
q = b;
~ ^ ~
/usr/include/c++/4.6/bits/stl_vector.h:373:7: note: candidate function
operator=(vector&& __x)
^
/usr/include/c++/4.6/bits/stl_vector.h:362:7: note: candidate function
operator=(const vector& __x);
^
/usr/include/c++/4.6/bits/stl_vector.h:394:7: note: candidate function
operator=(initializer_list<value_type> __l)
^
1 error generated.
我不清楚为什么它在没有 C++11 的情况下工作,而它却失败了。移动,注意线
vector< int > q = b; // In the main function, line 19
在 main 函数中不会导致错误。谁能解释为什么它不起作用,以及如何使它与 C++11 一起工作?