Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/cpp2a/constexpr-virtual7.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 // P1064R0 | |
2 // { dg-do compile } | |
3 // { dg-options "-std=c++2a" } | |
4 | |
5 struct X1 | |
6 { | |
7 virtual int f() const = 0; | |
8 }; | |
9 | |
10 struct X2: public X1 | |
11 { | |
12 constexpr virtual int f() const { return 2; } | |
13 }; | |
14 | |
15 struct X3: public X2 | |
16 { | |
17 virtual int f() const { return 3; } | |
18 }; | |
19 | |
20 struct X4: public X3 | |
21 { | |
22 constexpr virtual int f() const { return 4; } | |
23 }; | |
24 | |
25 constexpr int (X1::*pf)() const = &X1::f; | |
26 | |
27 constexpr X2 x2; | |
28 | |
29 struct S | |
30 { | |
31 int i, j; | |
32 constexpr S() : i(x2.f()), j((x2.*pf)()) { } | |
33 }; | |
34 | |
35 static_assert(S().i == 2); | |
36 static_assert(S().j == 2); | |
37 | |
38 constexpr X1 const& r2 = x2; | |
39 | |
40 struct S2 | |
41 { | |
42 int i, j; | |
43 constexpr S2() : i(r2.f()), j((r2.*pf)()) { } | |
44 }; | |
45 | |
46 static_assert(S2().i == 2); | |
47 static_assert(S2().j == 2); | |
48 | |
49 constexpr X1 const* p2 = &x2; | |
50 struct S3 | |
51 { | |
52 int i, j; | |
53 constexpr S3() : i(p2->f()), j((p2->*pf)()) { } | |
54 }; | |
55 | |
56 static_assert(S3().i == 2); | |
57 static_assert(S3().j == 2); | |
58 | |
59 constexpr X4 x4; | |
60 struct S4 | |
61 { | |
62 int i, j; | |
63 constexpr S4() : i(x4.f()), j((x4.*pf)()) { } | |
64 }; | |
65 | |
66 static_assert(S4().i == 4); | |
67 static_assert(S4().j == 4); | |
68 | |
69 constexpr X1 const& r4 = x4; | |
70 struct S5 | |
71 { | |
72 int i, j; | |
73 constexpr S5() : i(r4.f()), j((r4.*pf)()) { } | |
74 }; | |
75 | |
76 static_assert(S5().i == 4); | |
77 static_assert(S5().j == 4); | |
78 | |
79 constexpr X1 const* p4 = &x4; | |
80 struct S6 | |
81 { | |
82 int i, j; | |
83 constexpr S6() : i(p4->f()), j((p4->*pf)()) { } | |
84 }; | |
85 | |
86 static_assert(S6().i == 4); | |
87 static_assert(S6().j == 4); |