问题
#include <vector>
class A
{
std::vector<int> vec;
void swap( A & other) noexcept(noexcept(vec.swap(other.vec)))
{
vec.swap(other.vec);
}
};
int main()
{
}
This code compiles under clang(3.4) but not under gcc (4.7.1). Anyone can tell me what I am doing wrong?
EDIT
gcc error message is :
error: invalid use of incomplete type ‘class A’
error: forward declaration of ‘class A’
回答1:
As a work around, you may use (which works for gcc 4.7.1, gcc 4.8.1 and clang 3.4):
void swap(A& other) noexcept(noexcept(std::declval<decltype(A::vec)&>().swap(std::declval<decltype(A::vec)&>())))
or
void swap(A& other) noexcept(noexcept(vec.swap(vec)))
I think the problem is other.vec
...
来源:https://stackoverflow.com/questions/22115944/how-to-declare-noexcept-if-only-a-member-function-of-an-attribute-is-noexcept