1 /* Template to produce unique symbols.
2    Copyright (C) 2019-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library 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 GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 /* This template produces a unique symbol definition for an explicit
20    template instantiation (without also incorporating a reference),
21    and an extern template declaration can be used to reference that
22    symbol from another object.  The modid parameter is just a
23    placeholder to create different symbols (because it affects the
24    name mangling of the static value member).  By convention, it
25    should match the number of the module that contains the
26    definition.  */
27 
28 template <int modid>
29 struct unique_symbol
30 {
31   static int value;
32 };
33 
34 template <int modid>
35 int unique_symbol<modid>::value;
36