| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s |
| |
| class Z { }; |
| |
| class Y { |
| public: |
| Y(const Z&); |
| }; |
| |
| class X { |
| public: |
| X(int); |
| X(const Y&); |
| }; |
| |
| void f(X); // expected-note{{candidate function}} |
| |
| void g(short s, Y y, Z z) { |
| f(s); |
| f(1.0f); |
| f(y); |
| f(z); // expected-error{{no matching function}} |
| } |
| |
| |
| class FromShort { |
| public: |
| FromShort(short s); |
| }; |
| |
| class FromShortExplicitly { // expected-note{{candidate constructor (the implicit copy constructor)}} |
| #if __cplusplus >= 201103L // C++11 or later |
| // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} |
| #endif |
| |
| public: |
| explicit FromShortExplicitly(short s); |
| }; |
| |
| void explicit_constructor(short s) { |
| FromShort fs1(s); |
| FromShort fs2 = s; |
| FromShortExplicitly fse1(s); |
| FromShortExplicitly fse2 = s; // expected-error{{no viable conversion}} |
| } |
| |
| // PR5519 |
| struct X1 { X1(const char&); }; |
| void x1(X1); |
| void y1() { |
| x1(1); |
| } |