parent
2965d3e3cd
commit
ebd45a004d
|
@ -3843,10 +3843,10 @@ ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc,
|
||||||
ParmVarDecl *Param) {
|
ParmVarDecl *Param) {
|
||||||
if (Param->hasUnparsedDefaultArg()) {
|
if (Param->hasUnparsedDefaultArg()) {
|
||||||
Diag(CallLoc,
|
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();
|
FD << cast<CXXRecordDecl>(FD->getDeclContext())->getDeclName();
|
||||||
Diag(UnparsedDefaultArgLocs[Param],
|
Diag(UnparsedDefaultArgLocs[Param],
|
||||||
diag::note_default_argument_declared_here);
|
diag::note_default_argument_declared_here);
|
||||||
return ExprError();
|
return ExprError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3868,7 +3868,7 @@ ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc,
|
||||||
// The names in the [default argument] expression are bound, and
|
// The names in the [default argument] expression are bound, and
|
||||||
// the semantic constraints are checked, at the point where the
|
// the semantic constraints are checked, at the point where the
|
||||||
// default argument expression appears.
|
// default argument expression appears.
|
||||||
ContextRAII SavedContext(*this, FD->getDeclContext());
|
ContextRAII SavedContext(*this, FD);
|
||||||
Result = SubstExpr(UninstExpr, ArgList);
|
Result = SubstExpr(UninstExpr, ArgList);
|
||||||
}
|
}
|
||||||
if (Result.isInvalid())
|
if (Result.isInvalid())
|
||||||
|
|
|
@ -112,3 +112,21 @@ namespace test6_2 {
|
||||||
vector<A> v(1);
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue