annotate gcc/testsuite/g++.dg/cpp0x/explicit3.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // Test for "contextually converted to bool"
kono
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 struct A
kono
parents:
diff changeset
5 {
kono
parents:
diff changeset
6 explicit operator bool();
kono
parents:
diff changeset
7 };
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 void f (bool);
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 struct B
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 bool b;
kono
parents:
diff changeset
14 };
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 struct C
kono
parents:
diff changeset
17 {
kono
parents:
diff changeset
18 operator int();
kono
parents:
diff changeset
19 };
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 struct D
kono
parents:
diff changeset
22 {
kono
parents:
diff changeset
23 operator int();
kono
parents:
diff changeset
24 };
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 int main()
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 A a; C c; D d;
kono
parents:
diff changeset
29 // These contexts use an explicit bool conversion.
kono
parents:
diff changeset
30 if (a) {}
kono
parents:
diff changeset
31 for (; a; ) {}
kono
parents:
diff changeset
32 do {} while (a);
kono
parents:
diff changeset
33 while (a) {}
kono
parents:
diff changeset
34 a ? 1 : 0;
kono
parents:
diff changeset
35 a || true;
kono
parents:
diff changeset
36 a && true;
kono
parents:
diff changeset
37 !a;
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 a ? c : 1;
kono
parents:
diff changeset
40 a ? c : d;
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 // These do not.
kono
parents:
diff changeset
43 switch (a); // { dg-error "" }
kono
parents:
diff changeset
44 bool b = a; // { dg-error "" }
kono
parents:
diff changeset
45 f(a); // { dg-error "" }
kono
parents:
diff changeset
46 B b2 = { a }; // { dg-error "" }
kono
parents:
diff changeset
47 a + true; // { dg-error "5:no match" }
kono
parents:
diff changeset
48 b ? a : true; // { dg-error "5:?:" }
kono
parents:
diff changeset
49 a ? a : true; // { dg-error "5:?:" }
kono
parents:
diff changeset
50 }