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