diff options
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 6 | ||||
-rw-r--r-- | test/SemaCXX/friend.cpp | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index e8025409bd..19b0749843 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -3843,10 +3843,10 @@ ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, ParmVarDecl *Param) { if (Param->hasUnparsedDefaultArg()) { Diag(CallLoc, - diag::err_use_of_default_argument_to_function_declared_later) << + diag::err_use_of_default_argument_to_function_declared_later) << FD << cast<CXXRecordDecl>(FD->getDeclContext())->getDeclName(); Diag(UnparsedDefaultArgLocs[Param], - diag::note_default_argument_declared_here); + diag::note_default_argument_declared_here); return ExprError(); } @@ -3868,7 +3868,7 @@ ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, // The names in the [default argument] expression are bound, and // the semantic constraints are checked, at the point where the // default argument expression appears. - ContextRAII SavedContext(*this, FD->getDeclContext()); + ContextRAII SavedContext(*this, FD); Result = SubstExpr(UninstExpr, ArgList); } if (Result.isInvalid()) diff --git a/test/SemaCXX/friend.cpp b/test/SemaCXX/friend.cpp index 515edfd949..1222dd0940 100644 --- a/test/SemaCXX/friend.cpp +++ b/test/SemaCXX/friend.cpp @@ -112,3 +112,21 @@ namespace test6_2 { vector<A> v(1); } } +namespace test6_3 { + template<class T> + class vector { + public: + vector(int i) {} + void f(const T& t = T()) {} + }; + class A { + public: + private: + friend void vector<A>::f(const A&); + A() {} + }; + void f() { + vector<A> v(1); + v.f(); + } +} |