Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/cpp2a/constexpr-virtual5.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 f1() const = 0; | |
8 virtual int f2() const = 0; | |
9 virtual int f3() const = 0; | |
10 }; | |
11 | |
12 struct X2: public X1 | |
13 { | |
14 int i2 = 42; | |
15 constexpr virtual int f1() const { return 21; } | |
16 constexpr virtual int f2() const { return 22; } | |
17 constexpr virtual int f3() const { return 23; } | |
18 }; | |
19 | |
20 struct X3: public X2 | |
21 { | |
22 int i3 = 42; | |
23 virtual int f1() const { return 31; } | |
24 virtual int f2() const { return 32; } | |
25 virtual int f3() const { return 33; } | |
26 }; | |
27 | |
28 struct X4: public X3 | |
29 { | |
30 int i4 = 42; | |
31 constexpr virtual int f1() const { return 41; } | |
32 constexpr virtual int f2() const { return 42; } | |
33 constexpr virtual int f3() const { return 43; } | |
34 }; | |
35 | |
36 constexpr int (X1::*pf)() const = &X1::f2; | |
37 | |
38 constexpr X2 x2; | |
39 static_assert(x2.f2() == 22); | |
40 static_assert((x2.*pf)() == 22); | |
41 | |
42 constexpr X1 const& r2 = x2; | |
43 static_assert(r2.f2() == 22); | |
44 static_assert((r2.*pf)() == 22); | |
45 | |
46 constexpr X1 const* p2 = &x2; | |
47 static_assert(p2->f2() == 22); | |
48 static_assert((p2->*pf)() == 22); | |
49 | |
50 constexpr X4 x4; | |
51 static_assert(x4.f2() == 42); | |
52 static_assert((x4.*pf)() == 42); | |
53 | |
54 constexpr X1 const& r4 = x4; | |
55 static_assert(r4.f2() == 42); | |
56 static_assert((r4.*pf)() == 42); | |
57 | |
58 constexpr X1 const* p4 = &x4; | |
59 static_assert(p4->f2() == 42); | |
60 static_assert((p4->*pf)() == 42); |