annotate gcc/testsuite/g++.dg/template/mem_func_ptr.C @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do compile }
kono
parents:
diff changeset
2 template<typename T> struct takes_member_ptr;
kono
parents:
diff changeset
3 template<typename T, typename Klasse> struct takes_member_ptr<T Klasse::*> {};
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 template<typename T, typename Klasse>
kono
parents:
diff changeset
6 void fun_takes_member_ptr(T Klasse::*) {}
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 template<typename T> struct order_member_ptrs;
kono
parents:
diff changeset
10 template<typename T, typename Klasse> struct order_member_ptrs<T Klasse::*> {};
kono
parents:
diff changeset
11 template<typename R, typename T1, typename Klasse>
kono
parents:
diff changeset
12 struct order_member_ptrs<R (Klasse::*)(T1)>
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 typedef int type;
kono
parents:
diff changeset
15 };
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 template<typename R, typename T1, typename Klasse>
kono
parents:
diff changeset
18 struct order_member_ptrs<R (Klasse::*)(T1) const>
kono
parents:
diff changeset
19 {
kono
parents:
diff changeset
20 typedef int c_type;
kono
parents:
diff changeset
21 };
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 template<typename R, typename T1, typename Klasse>
kono
parents:
diff changeset
24 struct order_member_ptrs<R (Klasse::*)(T1) volatile>
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 typedef int v_type;
kono
parents:
diff changeset
27 };
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 template<typename R, typename T1, typename Klasse>
kono
parents:
diff changeset
30 struct order_member_ptrs<R (Klasse::*)(T1) const volatile>
kono
parents:
diff changeset
31 {
kono
parents:
diff changeset
32 typedef int cv_type;
kono
parents:
diff changeset
33 };
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 struct X {
kono
parents:
diff changeset
37 void bar(float) {}
kono
parents:
diff changeset
38 void bar_c(float) const {}
kono
parents:
diff changeset
39 void bar_v(float) volatile {}
kono
parents:
diff changeset
40 void bar_cv(float) const volatile {}
kono
parents:
diff changeset
41 };
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 void foo()
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 sizeof(takes_member_ptr<void (X::*)(float)>);
kono
parents:
diff changeset
46 sizeof(takes_member_ptr<void (X::*)(float) const>);
kono
parents:
diff changeset
47 sizeof(takes_member_ptr<void (X::*)(float) volatile>);
kono
parents:
diff changeset
48 sizeof(takes_member_ptr<void (X::*)(float) const volatile>);
kono
parents:
diff changeset
49 sizeof(order_member_ptrs<void (X::*)(float)>::type);
kono
parents:
diff changeset
50 sizeof(order_member_ptrs<void (X::*)(float) const>::c_type);
kono
parents:
diff changeset
51 sizeof(order_member_ptrs<void (X::*)(float) volatile>::v_type);
kono
parents:
diff changeset
52 sizeof(order_member_ptrs<void (X::*)(float) const volatile>::cv_type);
kono
parents:
diff changeset
53 fun_takes_member_ptr(&X::bar);
kono
parents:
diff changeset
54 fun_takes_member_ptr(&X::bar_c);
kono
parents:
diff changeset
55 fun_takes_member_ptr(&X::bar_v);
kono
parents:
diff changeset
56 fun_takes_member_ptr(&X::bar_cv);
kono
parents:
diff changeset
57 }