1 /* Template argument tests.
3 Copyright 2010-2024 Free Software Foundation, Inc.
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.
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.
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/>.
18 Please email any bugs, comments, and/or additions to this file to:
29 template<typename T
, int I
, int *P
, int S::*MP
>
53 template<typename T
, int I
, int *P
, int S::*MP
>
59 template<void (S::*F
) ()>
71 static void m (int x
) {}
73 template <void (*F
) (int)>
74 // or: template <void (F) (int)>
79 F (0); // Breakpoint 6.
86 // This caused a gdb crash during startup.
88 template <int a
> struct b
{};
89 template <typename
, typename
> struct c
{
90 template <long d
> using e
= b
<d
>;
93 template <typename
, template <typename
, typename
> class, unsigned long...>
95 template <typename g
, template <typename
, typename
> class h
, unsigned long i
>
100 template <typename g
> using f
= typename m
<g
, c
, 0>::j
;
108 Base
<double, 23, &a_global
, &S::f
> base
;
109 // Note that instantiating with P==0 does not work with g++.
110 // That would be worth testing, once g++ is fixed.
111 Base
<long, 47, &a_global
, &S::f
>::Inner
<float> inner
;
118 func
<unsigned char, 91, &a_global
, &S::f
> ();
119 base
.templ_m
<short> ();