#include <vector>
class A
{
std::vector<int> vec;
void swap( A & other) noexcept(noexcept(vec.swap(other.vec)))
{
vec.swap(other.vec);
}
};
int main()
{
}
此代码在clang(3.4)下编译,但不在gcc(4.7.1)下编译。谁能告诉我我做错了什么?
编辑
gcc错误信息是:
error: invalid use of incomplete type ‘class A’
error: forward declaration of ‘class A’
答案 0 :(得分:3)
作为一种解决方法,你可以使用(适用于gcc 4.7.1,gcc 4.8.1和clang 3.4):
void swap(A& other) noexcept(noexcept(std::declval<decltype(A::vec)&>().swap(std::declval<decltype(A::vec)&>())))
或
void swap(A& other) noexcept(noexcept(vec.swap(vec)))
我认为问题是other.vec
...