Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/c++/13/bits/utility.h
$ cat -n /usr/include/c++/13/bits/utility.h 1 // Utilities used throughout the library -*- C++ -*- 2 3 // Copyright (C) 2004-2023 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 //
. 24 25 /** @file include/bits/utility.h 26 * This is an internal header file, included by other library headers. 27 * Do not attempt to use it directly. @headername{utility} 28 * 29 * This file contains the parts of `
` needed by other headers, 30 * so they don't need to include the whole of `
`. 31 */ 32 33 #ifndef _GLIBCXX_UTILITY_H 34 #define _GLIBCXX_UTILITY_H 1 35 36 #pragma GCC system_header 37 38 #if __cplusplus >= 201103L 39 40 #include
41 #include
42 43 namespace std _GLIBCXX_VISIBILITY(default) 44 { 45 _GLIBCXX_BEGIN_NAMESPACE_VERSION 46 47 /// Finds the size of a given tuple type. 48 template
49 struct tuple_size; 50 51 // _GLIBCXX_RESOLVE_LIB_DEFECTS 52 // 2313. tuple_size should always derive from integral_constant
53 // 2770. tuple_size
specialization is not SFINAE compatible 54 55 template
::type, 57 typename = typename enable_if
::value>::type, 58 size_t = tuple_size<_Tp>::value> 59 using __enable_if_has_tuple_size = _Tp; 60 61 template
62 struct tuple_size
> 63 : public tuple_size<_Tp> { }; 64 65 template
66 struct tuple_size
> 67 : public tuple_size<_Tp> { }; 68 69 template
70 struct tuple_size
> 71 : public tuple_size<_Tp> { }; 72 73 #if __cplusplus >= 201703L 74 template
75 inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; 76 #endif 77 78 /// Gives the type of the ith element of a given tuple type. 79 template
80 struct tuple_element; 81 82 // Duplicate of C++14's tuple_element_t for internal use in C++11 mode 83 template
84 using __tuple_element_t = typename tuple_element<__i, _Tp>::type; 85 86 template
87 struct tuple_element<__i, const _Tp> 88 { 89 using type = const __tuple_element_t<__i, _Tp>; 90 }; 91 92 template
93 struct tuple_element<__i, volatile _Tp> 94 { 95 using type = volatile __tuple_element_t<__i, _Tp>; 96 }; 97 98 template
99 struct tuple_element<__i, const volatile _Tp> 100 { 101 using type = const volatile __tuple_element_t<__i, _Tp>; 102 }; 103 104 #if __cplusplus >= 201402L 105 106 // Return the index of _Tp in _Types, if it occurs exactly once. 107 // Otherwise, return sizeof...(_Types). 108 template
109 constexpr size_t 110 __find_uniq_type_in_pack() 111 { 112 constexpr size_t __sz = sizeof...(_Types); 113 constexpr bool __found[__sz] = { __is_same(_Tp, _Types) ... }; 114 size_t __n = __sz; 115 for (size_t __i = 0; __i < __sz; ++__i) 116 { 117 if (__found[__i]) 118 { 119 if (__n < __sz) // more than one _Tp found 120 return __sz; 121 __n = __i; 122 } 123 } 124 return __n; 125 } 126 127 // The standard says this macro and alias template should be in
but we 128 // define them here, to be available in
,
and
too. 129 // _GLIBCXX_RESOLVE_LIB_DEFECTS 130 // 3378. tuple_size_v/tuple_element_t should be available when 131 // tuple_size/tuple_element are 132 #define __cpp_lib_tuple_element_t 201402L 133 134 template
135 using tuple_element_t = typename tuple_element<__i, _Tp>::type; 136 #endif // C++14 137 138 // Stores a tuple of indices. Used by tuple and pair, and by bind() to 139 // extract the elements in a tuple. 140 template
struct _Index_tuple { }; 141 142 // Builds an _Index_tuple<0, 1, 2, ..., _Num-1>. 143 template
144 struct _Build_index_tuple 145 { 146 #if __has_builtin(__make_integer_seq) 147 template
148 using _IdxTuple = _Index_tuple<_Indices...>; 149 150 // Clang defines __make_integer_seq for this purpose. 151 using __type = __make_integer_seq<_IdxTuple, size_t, _Num>; 152 #else 153 // For GCC and other compilers, use __integer_pack instead. 154 using __type = _Index_tuple<__integer_pack(_Num)...>; 155 #endif 156 }; 157 158 #if __cplusplus >= 201402L 159 160 #define __cpp_lib_integer_sequence 201304L 161 162 /// Class template integer_sequence 163 template
164 struct integer_sequence 165 { 166 #if __cplusplus >= 202002L 167 static_assert(is_integral_v<_Tp>); 168 #endif 169 typedef _Tp value_type; 170 static constexpr size_t size() noexcept { return sizeof...(_Idx); } 171 }; 172 173 /// Alias template make_integer_sequence 174 template
175 using make_integer_sequence 176 #if __has_builtin(__make_integer_seq) 177 = __make_integer_seq
; 178 #else 179 = integer_sequence<_Tp, __integer_pack(_Tp(_Num))...>; 180 #endif 181 182 /// Alias template index_sequence 183 template
184 using index_sequence = integer_sequence
; 185 186 /// Alias template make_index_sequence 187 template
188 using make_index_sequence = make_integer_sequence
; 189 190 /// Alias template index_sequence_for 191 template
192 using index_sequence_for = make_index_sequence
; 193 194 #if __cplusplus >= 201703L 195 196 struct in_place_t { 197 explicit in_place_t() = default; 198 }; 199 200 inline constexpr in_place_t in_place{}; 201 202 template
struct in_place_type_t 203 { 204 explicit in_place_type_t() = default; 205 }; 206 207 template
208 inline constexpr in_place_type_t<_Tp> in_place_type{}; 209 210 template
struct in_place_index_t 211 { 212 explicit in_place_index_t() = default; 213 }; 214 215 template
216 inline constexpr in_place_index_t<_Idx> in_place_index{}; 217 218 template
219 inline constexpr bool __is_in_place_type_v = false; 220 221 template
222 inline constexpr bool __is_in_place_type_v
> = true; 223 224 template
225 using __is_in_place_type = bool_constant<__is_in_place_type_v<_Tp>>; 226 227 #endif // C++17 228 #endif // C++14 229 230 template
231 struct _Nth_type 232 { }; 233 234 template
235 struct _Nth_type<0, _Tp0, _Rest...> 236 { using type = _Tp0; }; 237 238 template
239 struct _Nth_type<1, _Tp0, _Tp1, _Rest...> 240 { using type = _Tp1; }; 241 242 template
243 struct _Nth_type<2, _Tp0, _Tp1, _Tp2, _Rest...> 244 { using type = _Tp2; }; 245 246 template
248 #if __cpp_concepts 249 requires (_Np >= 3) 250 #endif 251 struct _Nth_type<_Np, _Tp0, _Tp1, _Tp2, _Rest...> 252 : _Nth_type<_Np - 3, _Rest...> 253 { }; 254 255 #if ! __cpp_concepts // Need additional specializations to avoid ambiguities. 256 template
257 struct _Nth_type<0, _Tp0, _Tp1, _Tp2, _Rest...> 258 { using type = _Tp0; }; 259 260 template
261 struct _Nth_type<1, _Tp0, _Tp1, _Tp2, _Rest...> 262 { using type = _Tp1; }; 263 #endif 264 265 #if __cplusplus > 202002L 266 #define __cpp_lib_ranges_zip 202110L // for
and
267 #endif 268 269 _GLIBCXX_END_NAMESPACE_VERSION 270 } // namespace 271 272 #endif // C++11 273 #endif /* _GLIBCXX_UTILITY_H */
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™