Index: lib/Sema/SemaDecl.cpp =================================================================== --- lib/Sema/SemaDecl.cpp +++ lib/Sema/SemaDecl.cpp @@ -2993,7 +2993,7 @@ << New << getSpecialMember(OldMethod); return true; } - } else if (OldMethod->isExplicitlyDefaulted() && !isFriend) { + } else if (OldMethod->getFirstDecl()->isExplicitlyDefaulted() && !isFriend) { Diag(NewMethod->getLocation(), diag::err_definition_of_explicitly_defaulted_member) << getSpecialMember(OldMethod); Index: test/SemaCXX/cxx0x-defaulted-functions.cpp =================================================================== --- test/SemaCXX/cxx0x-defaulted-functions.cpp +++ test/SemaCXX/cxx0x-defaulted-functions.cpp @@ -150,6 +150,14 @@ Y::~Y() = default; // expected-error {{definition of explicitly defaulted}} } +namespace PR27699 { + struct X { + X(); + }; + X::X() = default; // expected-note {{here}} + X::X() = default; // expected-error {{redefinition of 'X'}} +} + namespace PR14577 { template struct Outer {