Viewing file: explicit1.C (1.29 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// P0892R2 // { dg-do compile } // { dg-options "-std=c++2a" }
constexpr int fn0 () { return 0; } constexpr int fn1 () { return 1; }
struct S { explicit(true) S(int); explicit(1 == 0) S(int, int); explicit(fn0()) S(int, int, int); explicit(fn1()) S(int, int, int, int); };
struct X { static const bool value = true; static constexpr bool foo () { return 1; } };
struct T { explicit(true ? 1 : throw 1) T(int); explicit(true || true ? 1 : throw 1) T(int, int); explicit(X::value) T(int, int, int); explicit(X::foo ()) T(int, int, int, int); };
struct W { constexpr operator bool() { return true; }; };
struct W2 { constexpr operator bool() { return false; }; };
struct U { explicit(W()) U(int); explicit(W2()) U(int, int); };
int main () { S s1 = { 1 }; // { dg-error "converting" } S s1x{ 1 }; S s2 = { 2, 3 }; S s3 = { 4, 5, 6 }; S s4 = { 7, 8, 9, 10 }; // { dg-error "converting" } S s4x{ 7, 8, 9, 10 };
T t1 = { 1 }; // { dg-error "converting" } T t2 = { 1, 2 }; // { dg-error "converting" } T t3 = { 1, 2, 3 }; // { dg-error "converting" } T t4 = { 1, 2, 3, 4 }; // { dg-error "converting" } T t5{ 1 }; T t6{ 1, 2 }; T t7{ 1, 2, 3 }; T t8{ 1, 2, 3, 4 };
U u1 = { 1 }; // { dg-error "converting" } U u2{ 1 }; U u3 = { 1, 2 }; U u4 { 1, 2 }; }
|