forked from OSchip/llvm-project
Make sure that we instantiate default function arguments for an
overloaded operator(). llvm-svn: 86581
This commit is contained in:
parent
d2f9c044c0
commit
1bc688dc60
|
@ -5420,7 +5420,14 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
|
|||
QualType ProtoArgType = Proto->getArgType(i);
|
||||
IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing");
|
||||
} else {
|
||||
Arg = CXXDefaultArgExpr::Create(Context, Method->getParamDecl(i));
|
||||
OwningExprResult DefArg
|
||||
= BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
|
||||
if (DefArg.isInvalid()) {
|
||||
IsError = true;
|
||||
break;
|
||||
}
|
||||
|
||||
Arg = DefArg.takeAs<Expr>();
|
||||
}
|
||||
|
||||
TheCall->setArg(i + 1, Arg);
|
||||
|
|
|
@ -65,8 +65,8 @@ void test_x0(X0<int> xi) {
|
|||
xi.f(17);
|
||||
}
|
||||
|
||||
struct NotDefaultConstructible { // expected-note{{candidate}}
|
||||
NotDefaultConstructible(int); // expected-note{{candidate}}
|
||||
struct NotDefaultConstructible { // expected-note 2{{candidate}}
|
||||
NotDefaultConstructible(int); // expected-note 2{{candidate}}
|
||||
};
|
||||
|
||||
void test_x0_not_default_constructible(X0<NotDefaultConstructible> xn) {
|
||||
|
@ -85,6 +85,18 @@ void test_X1() {
|
|||
X1<int> x1;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
struct X2 {
|
||||
void operator()(T = T()); // expected-error{{no matching}}
|
||||
};
|
||||
|
||||
void test_x2(X2<int> x2i, X2<NotDefaultConstructible> x2n) {
|
||||
x2i();
|
||||
x2i(17);
|
||||
x2n(NotDefaultConstructible(17));
|
||||
x2n(); // expected-note{{in instantiation of default function argument}}
|
||||
}
|
||||
|
||||
// PR5283
|
||||
namespace PR5283 {
|
||||
template<typename T> struct A {
|
||||
|
@ -131,3 +143,4 @@ namespace pr5301 {
|
|||
h(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue