| /* This testcase is part of GDB, the GNU debugger. | 
 |  | 
 |    Copyright 2024 Free Software Foundation, Inc. | 
 |  | 
 |    This program is free software; you can redistribute it and/or modify | 
 |    it under the terms of the GNU General Public License as published by | 
 |    the Free Software Foundation; either version 3 of the License, or | 
 |    (at your option) any later version. | 
 |  | 
 |    This program is distributed in the hope that it will be useful, | 
 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |    GNU General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU General Public License | 
 |    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ | 
 |  | 
 | /* Construct "foo<(enum_test)*>()" symbols.  These symbols can be tricky | 
 |    to handle, because of having a type cast inside the template parameter | 
 |    list, the "<(enum_test)*>" part.  The "<(" sequence in there can throw | 
 |    a wrench in "cp_search_name_hash()" function that tries to process | 
 |    things like "operator<(...)" while ignoring template parameter lists | 
 |    at the same time. | 
 |  | 
 |    If a breakpoint can be set on "foo", then all is in good order.  */ | 
 |  | 
 | enum enum_test | 
 | { | 
 |   zero = 0, | 
 |   one | 
 | }; | 
 |  | 
 | /* A template with a non-type parameter.  */ | 
 | template <enum_test test> | 
 | void | 
 | foo () | 
 | { | 
 | } | 
 |  | 
 | int | 
 | main () | 
 | { | 
 |   /* Instantiate a "foo<(enum_test)1>()" symbol explicitly.  */ | 
 |   foo<(enum_test)1> (); | 
 |  | 
 |   /* Some compilers, like g++, transform "enum_test::zero" to | 
 |      "(enum_test)0".  For such compilers, this "foo" instance | 
 |      would become "foo<(enum_test)0>()".  */ | 
 |   foo<enum_test::zero> (); | 
 |  | 
 |   return 0; | 
 | } |