]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.cp/temargs.cc
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.cp / temargs.cc
CommitLineData
34eaf542
TT
1/* Template argument tests.
2
e2882c85 3 Copyright 2010-2018 Free Software Foundation, Inc.
34eaf542
TT
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 Please email any bugs, comments, and/or additions to this file to:
19 bug-gdb@gnu.org */
20
21int a_global;
22
23struct S
24{
25 int f;
d0e53741 26 void somefunc() { }
34eaf542
TT
27};
28
29template<typename T, int I, int *P, int S::*MP>
30struct Base
31{
32 template<typename Z>
33 struct Inner
34 {
35 void inner_m ()
36 {
37 // Breakpoint 2.
38 }
39 };
40
41 void base_m ()
42 {
43 // Breakpoint 1.
44 }
45
46 template<typename Q>
47 void templ_m ()
48 {
49 // Breakpoint 4.
50 }
51};
52
53template<typename T, int I, int *P, int S::*MP>
54void func ()
55{
56 // Breakpoint 3.
57}
58
d0e53741
TT
59template<void (S::*F) ()>
60struct K2
61{
62 void k2_m ()
63 {
64 // Breakpoint 5.
65 }
66};
67
85a20c42
JK
68// GCC PR debug/49546
69struct S3
70{
71 static void m (int x) {}
72};
73template <void (*F) (int)>
74// or: template <void (F) (int)>
75struct K3
76{
77 void k3_m ()
78 {
79 F (0); // Breakpoint 6.
80 }
81};
82
34eaf542
TT
83int main ()
84{
85 Base<double, 23, &a_global, &S::f> base;
86 // Note that instantiating with P==0 does not work with g++.
87 // That would be worth testing, once g++ is fixed.
88 Base<long, 47, &a_global, &S::f>::Inner<float> inner;
d0e53741 89 K2<&S::somefunc> k2;
85a20c42
JK
90 K3<&S3::m> k3;
91// or: K3<S3::m> k3;
34eaf542
TT
92
93 base.base_m ();
94 inner.inner_m ();
95 func<unsigned char, 91, &a_global, &S::f> ();
96 base.templ_m<short> ();
d0e53741 97 k2.k2_m ();
85a20c42 98 k3.k3_m ();
34eaf542
TT
99
100 return 0;
101}