1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4 
5 class Z { };
6 
7 class Y {
8 public:
9   Y(const Z&);
10 };
11 
12 class X {
13 public:
14   X(int);
15   X(const Y&);
16 };
17 
18 void f(X); // expected-note{{candidate function}}
19 
g(short s,Y y,Z z)20 void g(short s, Y y, Z z) {
21   f(s);
22   f(1.0f);
23   f(y);
24   f(z); // expected-error{{no matching function}}
25 }
26 
27 
28 class FromShort {
29 public:
30   FromShort(short s);
31 };
32 
33 class FromShortExplicitly { // expected-note{{candidate constructor (the implicit copy constructor)}}
34 #if __cplusplus >= 201103L // C++11 or later
35 // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}}
36 #endif
37 
38 public:
39   explicit FromShortExplicitly(short s); // expected-note {{explicit constructor is not a candidate}}
40 };
41 
explicit_constructor(short s)42 void explicit_constructor(short s) {
43   FromShort fs1(s);
44   FromShort fs2 = s;
45   FromShortExplicitly fse1(s);
46   FromShortExplicitly fse2 = s; // expected-error{{no viable conversion}}
47 }
48 
49 // PR5519
50 struct X1 { X1(const char&); };
51 void x1(X1);
y1()52 void y1() {
53   x1(1);
54 }
55