2014-03-01 38 views
0
#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)下编译。任何人都可以告诉我我做错了什么?如何声明noexcept如果只有一个属性的成员函数是noexcept?

编辑

gcc的错误消息是:

error: invalid use of incomplete type ‘class A’ 
error: forward declaration of ‘class A’ 
+0

错误信息是否存在? – hivert

+0

@hivert在这里你去 – qdii

回答

3

作为一种解决方法,你可以使用(它适用于GCC 4.7.1,GCC 4.8.1和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 ...

+0

啊,这很好! – qdii

相关问题