mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-08 00:52:54 +00:00
2519554134
explicit functions that are not candidates. It's not always obvious that the reason a conversion was not possible is because the function you wanted to call is 'explicit', so explicitly say if that's the case. It would be nice to rank the explicit candidates higher in the diagnostic if an implicit conversion sequence exists for their arguments, but unfortunately we can't determine that without potentially triggering non-immediate-context errors that we're not permitted to produce.
55 lines
1.1 KiB
C++
55 lines
1.1 KiB
C++
// 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); // expected-note {{explicit constructor is not a candidate}}
|
|
};
|
|
|
|
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);
|
|
}
|