qdii
qdii

Reputation: 12973

How to declare noexcept if only a member function of an attribute is noexcept?

#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’

Upvotes: 0

Views: 455

Answers (1)

Jarod42
Jarod42

Reputation: 218098

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...

Upvotes: 3

Related Questions