From f4fe843aac730e2202b3c9c6c52649ee186ba788 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 8 Jun 2012 01:30:54 +0000 Subject: [PATCH] Allow friend declarations of defaulted special member functions. Only definitions of such members are prohibited, not mere declarations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158186 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 2 +- test/SemaCXX/cxx0x-defaulted-functions.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index fdda9014dc..68f7469457 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2039,7 +2039,7 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD, Scope *S) { << New << getSpecialMember(OldMethod); return true; } - } else if (OldMethod->isExplicitlyDefaulted()) { + } else if (OldMethod->isExplicitlyDefaulted() && !isFriend) { Diag(NewMethod->getLocation(), diag::err_definition_of_explicitly_defaulted_member) << getSpecialMember(OldMethod); diff --git a/test/SemaCXX/cxx0x-defaulted-functions.cpp b/test/SemaCXX/cxx0x-defaulted-functions.cpp index 2ab0f73eae..595d428806 100644 --- a/test/SemaCXX/cxx0x-defaulted-functions.cpp +++ b/test/SemaCXX/cxx0x-defaulted-functions.cpp @@ -51,3 +51,9 @@ template struct S : T { struct lit { constexpr lit() {} }; S s_lit; // ok S s_bar; // ok + +struct Friends { + friend S::S(); + friend S::S(const S&); + friend S::S(S&&); +}; -- 2.40.0