зеркало из https://github.com/microsoft/clang-1.git
70 строки
1006 B
C++
70 строки
1006 B
C++
// RUN: clang-cc -fsyntax-only -verify %s
|
|
struct X {
|
|
operator bool();
|
|
};
|
|
|
|
int& f(bool);
|
|
float& f(int);
|
|
|
|
void f_test(X x) {
|
|
int& i1 = f(x);
|
|
}
|
|
|
|
struct Y {
|
|
operator short();
|
|
operator float();
|
|
};
|
|
|
|
void g(int);
|
|
|
|
void g_test(Y y) {
|
|
g(y);
|
|
short s;
|
|
s = y;
|
|
}
|
|
|
|
struct A { };
|
|
struct B : A { };
|
|
|
|
struct C {
|
|
operator B&();
|
|
};
|
|
|
|
// Test reference binding via an lvalue conversion function.
|
|
void h(volatile A&);
|
|
void h_test(C c) {
|
|
h(c);
|
|
}
|
|
|
|
// Test conversion followed by copy-construction
|
|
struct FunkyDerived;
|
|
|
|
struct Base {
|
|
Base(const FunkyDerived&);
|
|
};
|
|
|
|
struct Derived : Base { };
|
|
|
|
struct FunkyDerived : Base { };
|
|
|
|
struct ConvertibleToBase {
|
|
operator Base();
|
|
};
|
|
|
|
struct ConvertibleToDerived {
|
|
operator Derived();
|
|
};
|
|
|
|
struct ConvertibleToFunkyDerived {
|
|
operator FunkyDerived();
|
|
};
|
|
|
|
void test_conversion(ConvertibleToBase ctb, ConvertibleToDerived ctd,
|
|
ConvertibleToFunkyDerived ctfd) {
|
|
Base b1 = ctb;
|
|
Base b2(ctb);
|
|
Base b3 = ctd;
|
|
Base b4(ctd);
|
|
Base b5 = ctfd;
|
|
}
|