Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp2a/explicit1.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line source
// 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 }; }