1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
// PR c++/87820
// { dg-do compile { target c++11 } }
struct A {
constexpr explicit operator int() const { return 0; }
};
template<class T>
void f() {
A a;
T t1 = a; // { dg-error "cannot convert" }
T t2 = {a}; // { dg-error "cannot convert" }
T t3(a);
T t4{a};
T t5 = T(a);
T t6 = T{a};
new T(a);
new T{a};
}
template<class T>
void g() {
T t;
int n1 = t; // { dg-error "cannot convert" }
int n2 = {t}; // { dg-error "cannot convert" }
int n3(t);
int n4{t};
int n5 = int(t);
int n6 = int{t};
new int(t);
new int{t};
}
template void f<int>();
template void g<A>();
template<class T>
struct B {
static constexpr A a{};
static constexpr T t1 = a; // { dg-error "cannot convert" }
static constexpr T t2 = {a}; // { dg-error "cannot convert" }
static constexpr T t4{a};
static constexpr T t5 = T(a);
static constexpr T t6 = T{a};
};
template<class T>
struct C {
static constexpr T t{};
static constexpr int n1 = t; // { dg-error "cannot convert" }
static constexpr int n2 = {t}; // { dg-error "cannot convert" }
static constexpr int n4{t};
static constexpr int n5 = int(t);
static constexpr int n6 = int{t};
};
template struct B<int>;
template struct C<A>;
#if __cpp_inline_variables
template<class T>
struct D {
static inline A a;
static inline T t1 = a; // { dg-error "cannot convert" "" { target c++17 } }
static inline T t2 = {a}; // { dg-error "cannot convert" "" { target c++17 } }
static inline T t4{a};
static inline T t5 = T(a);
static inline T t6 = T{a};
};
template<class T>
struct E {
static inline T t;
static inline int n1 = t; // { dg-error "cannot convert" "" { target c++17 } }
static inline int n2 = {t}; // { dg-error "cannot convert" "" { target c++17 } }
static inline int n4{t};
static inline int n5 = int(t);
static inline int n6 = int{t};
};
template struct D<int>;
template struct E<A>;
#endif
|