1*b5f2c4e4SRichard Smith // RUN: %clang_cc1 -verify %s
2*b5f2c4e4SRichard Smith
3*b5f2c4e4SRichard Smith void a(int x = 0, int y); // #1 expected-error {{missing default argument on parameter 'y'}}
b()4*b5f2c4e4SRichard Smith void b() {
5*b5f2c4e4SRichard Smith a(); // expected-error {{no matching function}} expected-note@#1 {{requires 2 arguments, but 0 were provided}}
6*b5f2c4e4SRichard Smith a(0); // expected-error {{no matching function}} expected-note@#1 {{requires 2 arguments, but 1 was provided}}
7*b5f2c4e4SRichard Smith a(0, 0);
8*b5f2c4e4SRichard Smith }
9*b5f2c4e4SRichard Smith
10*b5f2c4e4SRichard Smith void a(int x, int y = 0);
c()11*b5f2c4e4SRichard Smith void c() {
12*b5f2c4e4SRichard Smith a();
13*b5f2c4e4SRichard Smith a(0);
14*b5f2c4e4SRichard Smith a(0, 0);
15*b5f2c4e4SRichard Smith }
16*b5f2c4e4SRichard Smith
17*b5f2c4e4SRichard Smith template<typename ...T> void f(int x = 0, T ...); // #2
g()18*b5f2c4e4SRichard Smith void g() {
19*b5f2c4e4SRichard Smith f<int>(); // expected-error {{no matching function}} expected-note@#2 {{requires 2 arguments, but 0 were provided}}
20*b5f2c4e4SRichard Smith f<int>(0); // expected-error {{no matching function}} expected-note@#2 {{requires 2 arguments, but 1 was provided}}
21*b5f2c4e4SRichard Smith f<int>(0, 0);
22*b5f2c4e4SRichard Smith }
23