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