Coverage Report

Created: 2026-01-10 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/magic_enum/include/magic_enum/magic_enum.hpp
Line
Count
Source
1
//  __  __             _        ______                          _____
2
// |  \/  |           (_)      |  ____|                        / ____|_     _
3
// | \  / | __ _  __ _ _  ___  | |__   _ __  _   _ _ __ ___   | |   _| |_ _| |_
4
// | |\/| |/ _` |/ _` | |/ __| |  __| | '_ \| | | | '_ ` _ \  | |  |_   _|_   _|
5
// | |  | | (_| | (_| | | (__  | |____| | | | |_| | | | | | | | |____|_|   |_|
6
// |_|  |_|\__,_|\__, |_|\___| |______|_| |_|\__,_|_| |_| |_|  \_____|
7
//                __/ | https://github.com/Neargye/magic_enum
8
//               |___/  version 0.9.7
9
//
10
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
11
// SPDX-License-Identifier: MIT
12
// Copyright (c) 2019 - 2024 Daniil Goncharov <neargye@gmail.com>.
13
//
14
// Permission is hereby  granted, free of charge, to any  person obtaining a copy
15
// of this software and associated  documentation files (the "Software"), to deal
16
// in the Software  without restriction, including without  limitation the rights
17
// to  use, copy,  modify, merge,  publish, distribute,  sublicense, and/or  sell
18
// copies  of  the Software,  and  to  permit persons  to  whom  the Software  is
19
// furnished to do so, subject to the following conditions:
20
//
21
// The above copyright notice and this permission notice shall be included in all
22
// copies or substantial portions of the Software.
23
//
24
// THE SOFTWARE  IS PROVIDED "AS  IS", WITHOUT WARRANTY  OF ANY KIND,  EXPRESS OR
25
// IMPLIED,  INCLUDING BUT  NOT  LIMITED TO  THE  WARRANTIES OF  MERCHANTABILITY,
26
// FITNESS FOR  A PARTICULAR PURPOSE AND  NONINFRINGEMENT. IN NO EVENT  SHALL THE
27
// AUTHORS  OR COPYRIGHT  HOLDERS  BE  LIABLE FOR  ANY  CLAIM,  DAMAGES OR  OTHER
28
// LIABILITY, WHETHER IN AN ACTION OF  CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
// OUT OF OR IN CONNECTION WITH THE SOFTWARE  OR THE USE OR OTHER DEALINGS IN THE
30
// SOFTWARE.
31
32
#ifndef NEARGYE_MAGIC_ENUM_HPP
33
#define NEARGYE_MAGIC_ENUM_HPP
34
35
#define MAGIC_ENUM_VERSION_MAJOR 0
36
#define MAGIC_ENUM_VERSION_MINOR 9
37
#define MAGIC_ENUM_VERSION_PATCH 7
38
39
#ifndef MAGIC_ENUM_USE_STD_MODULE
40
#include <array>
41
#include <cstddef>
42
#include <cstdint>
43
#include <functional>
44
#include <limits>
45
#include <type_traits>
46
#include <utility>
47
#endif
48
49
#if defined(MAGIC_ENUM_CONFIG_FILE)
50
#  include MAGIC_ENUM_CONFIG_FILE
51
#endif
52
53
#ifndef MAGIC_ENUM_USE_STD_MODULE
54
#if !defined(MAGIC_ENUM_USING_ALIAS_OPTIONAL)
55
#  include <optional>
56
#endif
57
#if !defined(MAGIC_ENUM_USING_ALIAS_STRING)
58
#  include <string>
59
#endif
60
#if !defined(MAGIC_ENUM_USING_ALIAS_STRING_VIEW)
61
#  include <string_view>
62
#endif
63
#endif
64
65
#if defined(MAGIC_ENUM_NO_ASSERT)
66
#  define MAGIC_ENUM_ASSERT(...) static_cast<void>(0)
67
#elif !defined(MAGIC_ENUM_ASSERT)
68
#  include <cassert>
69
42.1k
#  define MAGIC_ENUM_ASSERT(...) assert((__VA_ARGS__))
70
#endif
71
72
#if defined(__clang__)
73
#  pragma clang diagnostic push
74
#  pragma clang diagnostic ignored "-Wunknown-warning-option"
75
#  pragma clang diagnostic ignored "-Wenum-constexpr-conversion"
76
#  pragma clang diagnostic ignored "-Wuseless-cast" // suppresses 'static_cast<char_type>('\0')' for char_type = char (common on Linux).
77
#elif defined(__GNUC__)
78
#  pragma GCC diagnostic push
79
#  pragma GCC diagnostic ignored "-Wmaybe-uninitialized" // May be used uninitialized 'return {};'.
80
#  pragma GCC diagnostic ignored "-Wuseless-cast" // suppresses 'static_cast<char_type>('\0')' for char_type = char (common on Linux).
81
#elif defined(_MSC_VER)
82
#  pragma warning(push)
83
#  pragma warning(disable : 26495) // Variable 'static_str<N>::chars_' is uninitialized.
84
#  pragma warning(disable : 28020) // Arithmetic overflow: Using operator '-' on a 4 byte value and then casting the result to a 8 byte value.
85
#  pragma warning(disable : 26451) // The expression '0<=_Param_(1)&&_Param_(1)<=1-1' is not true at this call.
86
#  pragma warning(disable : 4514) // Unreferenced inline function has been removed.
87
#endif
88
89
// Checks magic_enum compiler compatibility.
90
#if defined(__clang__) && __clang_major__ >= 5 || defined(__GNUC__) && __GNUC__ >= 9 || defined(_MSC_VER) && _MSC_VER >= 1910 || defined(__RESHARPER__)
91
#  undef  MAGIC_ENUM_SUPPORTED
92
#  define MAGIC_ENUM_SUPPORTED 1
93
#endif
94
95
// Checks magic_enum compiler aliases compatibility.
96
#if defined(__clang__) && __clang_major__ >= 5 || defined(__GNUC__) && __GNUC__ >= 9 || defined(_MSC_VER) && _MSC_VER >= 1920
97
#  undef  MAGIC_ENUM_SUPPORTED_ALIASES
98
#  define MAGIC_ENUM_SUPPORTED_ALIASES 1
99
#endif
100
101
// Specify the calling convention for compilers that need it in order to get reliable mangled names under different
102
// compiler flags. In particular, MSVC allows changing the default calling convention on x86.
103
#if defined(__clang__) || defined(__GNUC__)
104
#define MAGIC_ENUM_CALLING_CONVENTION
105
#elif defined(_MSC_VER)
106
#define MAGIC_ENUM_CALLING_CONVENTION __cdecl
107
#endif
108
109
// Enum value must be greater or equals than MAGIC_ENUM_RANGE_MIN. By default MAGIC_ENUM_RANGE_MIN = -128.
110
// If need another min range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MIN.
111
#if !defined(MAGIC_ENUM_RANGE_MIN)
112
#  define MAGIC_ENUM_RANGE_MIN -128
113
#endif
114
115
// Enum value must be less or equals than MAGIC_ENUM_RANGE_MAX. By default MAGIC_ENUM_RANGE_MAX = 127.
116
// If need another max range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MAX.
117
#if !defined(MAGIC_ENUM_RANGE_MAX)
118
#  define MAGIC_ENUM_RANGE_MAX 127
119
#endif
120
121
// Improve ReSharper C++ intellisense performance with builtins, avoiding unnecessary template instantiations.
122
#if defined(__RESHARPER__)
123
#  undef MAGIC_ENUM_GET_ENUM_NAME_BUILTIN
124
#  undef MAGIC_ENUM_GET_TYPE_NAME_BUILTIN
125
#  if __RESHARPER__ >= 20230100
126
#    define MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V) __rscpp_enumerator_name(V)
127
#    define MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(T) __rscpp_type_name<T>()
128
#  else
129
#    define MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V) nullptr
130
#    define MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(T) nullptr
131
#  endif
132
#endif
133
134
namespace magic_enum {
135
136
// If need another optional type, define the macro MAGIC_ENUM_USING_ALIAS_OPTIONAL.
137
#if defined(MAGIC_ENUM_USING_ALIAS_OPTIONAL)
138
MAGIC_ENUM_USING_ALIAS_OPTIONAL
139
#else
140
using std::optional;
141
#endif
142
143
// If need another string_view type, define the macro MAGIC_ENUM_USING_ALIAS_STRING_VIEW.
144
#if defined(MAGIC_ENUM_USING_ALIAS_STRING_VIEW)
145
MAGIC_ENUM_USING_ALIAS_STRING_VIEW
146
#else
147
using std::string_view;
148
#endif
149
150
// If need another string type, define the macro MAGIC_ENUM_USING_ALIAS_STRING.
151
#if defined(MAGIC_ENUM_USING_ALIAS_STRING)
152
MAGIC_ENUM_USING_ALIAS_STRING
153
#else
154
using std::string;
155
#endif
156
157
using char_type = string_view::value_type;
158
static_assert(std::is_same_v<string_view::value_type, string::value_type>, "magic_enum::customize requires same string_view::value_type and string::value_type");
159
static_assert([] {
160
  if constexpr (std::is_same_v<char_type, wchar_t>) {
161
    constexpr const char     c[] =  "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789|";
162
    constexpr const wchar_t wc[] = L"abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789|";
163
    static_assert(std::size(c) == std::size(wc), "magic_enum::customize identifier characters are multichars in wchar_t.");
164
165
    for (std::size_t i = 0; i < std::size(c); ++i) {
166
      if (c[i] != wc[i]) {
167
        return false;
168
      }
169
    }
170
  }
171
  return true;
172
} (), "magic_enum::customize wchar_t is not compatible with ASCII.");
173
174
namespace customize {
175
  template <typename E, typename = void>
176
  struct enum_range;
177
}
178
179
namespace detail {
180
  template<typename E,typename = void>
181
  constexpr inline std::size_t prefix_length_or_zero = 0;
182
183
  template<typename E>
184
  constexpr inline auto prefix_length_or_zero<E, std::void_t<decltype(customize::enum_range<E>::prefix_length)>> = std::size_t{customize::enum_range<E>::prefix_length};
185
}
186
187
namespace customize {
188
189
template <bool IsFlags = false, int Min = MAGIC_ENUM_RANGE_MIN, int Max = MAGIC_ENUM_RANGE_MAX, std::size_t PrefixLength = 0>
190
struct adl_info_holder {
191
  constexpr static int max = Max;
192
  constexpr static int min = Min;
193
  constexpr static bool is_flags =IsFlags;
194
  constexpr static std::size_t prefix_length = PrefixLength;
195
196
  template<int min,int max>
197
  constexpr static adl_info_holder<IsFlags,min,max,PrefixLength> minmax() { return {}; }
198
199
  template<bool is_flag>
200
  constexpr static adl_info_holder<is_flag,Min,Max,PrefixLength> flag() { return {}; }
201
202
  template<std::size_t prefix_len>
203
  constexpr static adl_info_holder<IsFlags,Min,Max,prefix_len> prefix() { return {}; }
204
};
205
206
0
constexpr adl_info_holder<> adl_info() { return {}; }
207
208
// Enum value must be in range [MAGIC_ENUM_RANGE_MIN, MAGIC_ENUM_RANGE_MAX]. By default MAGIC_ENUM_RANGE_MIN = -128, MAGIC_ENUM_RANGE_MAX = 127.
209
// If need another range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MIN and MAGIC_ENUM_RANGE_MAX.
210
// If need another range for specific enum type, add specialization enum_range for necessary enum type.
211
template <typename E,typename /*= void*/>
212
struct enum_range {
213
  static constexpr int min = MAGIC_ENUM_RANGE_MIN;
214
  static constexpr int max = MAGIC_ENUM_RANGE_MAX;
215
};
216
217
template <typename E>
218
struct enum_range<E, decltype(void(magic_enum_define_range_adl(E{})))> : decltype(magic_enum_define_range_adl(E{})) {};
219
220
static_assert(MAGIC_ENUM_RANGE_MAX > MAGIC_ENUM_RANGE_MIN, "MAGIC_ENUM_RANGE_MAX must be greater than MAGIC_ENUM_RANGE_MIN.");
221
222
namespace detail {
223
224
enum class customize_tag {
225
  default_tag,
226
  invalid_tag,
227
  custom_tag
228
};
229
230
} // namespace magic_enum::customize::detail
231
232
class customize_t : public std::pair<detail::customize_tag, string_view> {
233
 public:
234
0
  constexpr customize_t(string_view srt) : std::pair<detail::customize_tag, string_view>{detail::customize_tag::custom_tag, srt} {}
235
0
  constexpr customize_t(const char_type* srt) : customize_t{string_view{srt}} {}
236
0
  constexpr customize_t(detail::customize_tag tag) : std::pair<detail::customize_tag, string_view>{tag, string_view{}} {
237
0
    MAGIC_ENUM_ASSERT(tag != detail::customize_tag::custom_tag);
238
0
  }
239
};
240
241
// Default customize.
242
inline constexpr auto default_tag = customize_t{detail::customize_tag::default_tag};
243
// Invalid customize.
244
inline constexpr auto invalid_tag = customize_t{detail::customize_tag::invalid_tag};
245
246
// If need custom names for enum, add specialization enum_name for necessary enum type.
247
template <typename E>
248
0
constexpr customize_t enum_name(E) noexcept {
249
0
  return default_tag;
250
0
}
251
252
// If need custom type name for enum, add specialization enum_type_name for necessary enum type.
253
template <typename E>
254
constexpr customize_t enum_type_name() noexcept {
255
  return default_tag;
256
}
257
258
} // namespace magic_enum::customize
259
260
namespace detail {
261
262
template <typename T>
263
struct supported
264
#if defined(MAGIC_ENUM_SUPPORTED) && MAGIC_ENUM_SUPPORTED || defined(MAGIC_ENUM_NO_CHECK_SUPPORT)
265
  : std::true_type {};
266
#else
267
  : std::false_type {};
268
#endif
269
270
template <auto V, typename E = std::decay_t<decltype(V)>, std::enable_if_t<std::is_enum_v<E>, int> = 0>
271
using enum_constant = std::integral_constant<E, V>;
272
273
template <typename... T>
274
inline constexpr bool always_false_v = false;
275
276
template <typename T, typename = void>
277
struct has_is_flags : std::false_type {};
278
279
template <typename T>
280
struct has_is_flags<T, std::void_t<decltype(customize::enum_range<T>::is_flags)>> : std::bool_constant<std::is_same_v<bool, std::decay_t<decltype(customize::enum_range<T>::is_flags)>>> {};
281
282
template <typename T, typename = void>
283
struct range_min : std::integral_constant<int, MAGIC_ENUM_RANGE_MIN> {};
284
285
template <typename T>
286
struct range_min<T, std::void_t<decltype(customize::enum_range<T>::min)>> : std::integral_constant<decltype(customize::enum_range<T>::min), customize::enum_range<T>::min> {};
287
288
template <typename T, typename = void>
289
struct range_max : std::integral_constant<int, MAGIC_ENUM_RANGE_MAX> {};
290
291
template <typename T>
292
struct range_max<T, std::void_t<decltype(customize::enum_range<T>::max)>> : std::integral_constant<decltype(customize::enum_range<T>::max), customize::enum_range<T>::max> {};
293
294
struct str_view {
295
  const char* str_ = nullptr;
296
  std::size_t size_ = 0;
297
};
298
299
template <std::uint16_t N>
300
class static_str {
301
 public:
302
  constexpr explicit static_str(str_view str) noexcept : static_str{str.str_, std::make_integer_sequence<std::uint16_t, N>{}} {
303
    MAGIC_ENUM_ASSERT(str.size_ == N);
304
  }
305
306
  constexpr explicit static_str(const char* const str) noexcept : static_str{ str, std::make_integer_sequence<std::uint16_t, N>{} } {
307
  }
308
309
  constexpr explicit static_str(string_view str) noexcept : static_str{str.data(), std::make_integer_sequence<std::uint16_t, N>{}} {
310
    MAGIC_ENUM_ASSERT(str.size() == N);
311
  }
312
313
0
  constexpr const char_type* data() const noexcept { return chars_; }
314
315
0
  constexpr std::uint16_t size() const noexcept { return N; }
316
317
0
  constexpr string_view str() const noexcept { return string_view(data(), size()); }
318
319
 private:
320
  template <std::uint16_t... I>
321
  constexpr static_str(const char* str, std::integer_sequence<std::uint16_t, I...>) noexcept : chars_{static_cast<char_type>(str[I])..., static_cast<char_type>('\0')} {}
322
323
  template <std::uint16_t... I>
324
  constexpr static_str(string_view str, std::integer_sequence<std::uint16_t, I...>) noexcept : chars_{str[I]..., static_cast<char_type>('\0')} {}
325
326
  char_type chars_[static_cast<std::size_t>(N) + 1];
327
};
328
329
template <>
330
class static_str<0> {
331
 public:
332
  constexpr static_str() noexcept = default;
333
334
0
  constexpr static_str(str_view) noexcept {}
335
336
0
  constexpr static_str(string_view) noexcept {}
337
338
0
  constexpr const char_type* data() const noexcept { return chars_; }
339
340
0
  constexpr std::uint16_t size() const noexcept { return 0; }
341
342
0
  constexpr string_view str() const noexcept { return string_view(data(), size()); }
343
344
private:
345
  static constexpr char_type chars_[1] = {};
346
};
347
348
template <typename Op = std::equal_to<>>
349
class case_insensitive {
350
  static constexpr char_type to_lower(char_type c) noexcept {
351
    return (c >= static_cast<char_type>('A') && c <= static_cast<char_type>('Z')) ? static_cast<char_type>(c + (static_cast<char_type>('a') - static_cast<char_type>('A'))) : c;
352
  }
353
354
 public:
355
  template <typename L, typename R>
356
  constexpr auto operator()(L lhs, R rhs) const noexcept -> std::enable_if_t<std::is_same_v<std::decay_t<L>, char_type> && std::is_same_v<std::decay_t<R>, char_type>, bool> {
357
    return Op{}(to_lower(lhs), to_lower(rhs));
358
  }
359
};
360
361
0
constexpr std::size_t find(string_view str, char_type c) noexcept {
362
0
#if defined(__clang__) && __clang_major__ < 9 && defined(__GLIBCXX__) || defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__)
363
0
// https://stackoverflow.com/questions/56484834/constexpr-stdstring-viewfind-last-of-doesnt-work-on-clang-8-with-libstdc
364
0
// https://developercommunity.visualstudio.com/content/problem/360432/vs20178-regression-c-failed-in-test.html
365
0
  constexpr bool workaround = true;
366
0
#else
367
0
  constexpr bool workaround = false;
368
0
#endif
369
0
370
0
  if constexpr (workaround) {
371
0
    for (std::size_t i = 0; i < str.size(); ++i) {
372
0
      if (str[i] == c) {
373
0
        return i;
374
0
      }
375
0
    }
376
0
377
0
    return string_view::npos;
378
0
  } else {
379
0
    return str.find(c);
380
0
  }
381
0
}
382
383
template <typename BinaryPredicate>
384
inline constexpr bool is_default_predicate_v = std::is_same_v<std::decay_t<BinaryPredicate>, std::equal_to<string_view::value_type>> || std::is_same_v<std::decay_t<BinaryPredicate>, std::equal_to<>>;
385
386
387
template <typename BinaryPredicate>
388
inline constexpr bool is_nothrow_invocable_v = is_default_predicate_v<BinaryPredicate> || std::is_nothrow_invocable_r_v<bool, BinaryPredicate, char_type, char_type>;
389
390
391
template <typename BinaryPredicate>
392
21.5k
constexpr bool cmp_equal(string_view lhs, string_view rhs, [[maybe_unused]] BinaryPredicate&& p) noexcept(is_nothrow_invocable_v<BinaryPredicate>) {
393
#if defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__)
394
  // https://developercommunity.visualstudio.com/content/problem/360432/vs20178-regression-c-failed-in-test.html
395
  // https://developercommunity.visualstudio.com/content/problem/232218/c-constexpr-string-view.html
396
  constexpr bool workaround = true;
397
#else
398
21.5k
  constexpr bool workaround = false;
399
21.5k
#endif
400
401
  if constexpr (!is_default_predicate_v<BinaryPredicate> || workaround) {
402
    if (lhs.size() != rhs.size()) {
403
      return false;
404
    }
405
406
    const auto size = lhs.size();
407
    for (std::size_t i = 0; i < size; ++i) {
408
      if (!p(lhs[i], rhs[i])) {
409
        return false;
410
      }
411
    }
412
413
    return true;
414
21.5k
  } else {
415
21.5k
    return lhs == rhs;
416
21.5k
  }
417
21.5k
}
418
419
template <typename L, typename R>
420
0
constexpr bool cmp_less(L lhs, R rhs) noexcept {
421
0
  static_assert(std::is_integral_v<L> && std::is_integral_v<R>, "magic_enum::detail::cmp_less requires integral type.");
422
0
423
0
  if constexpr (std::is_signed_v<L> == std::is_signed_v<R>) {
424
0
    // If same signedness (both signed or both unsigned).
425
0
    return lhs < rhs;
426
0
  } else if constexpr (std::is_same_v<L, bool>) { // bool special case
427
0
      return static_cast<R>(lhs) < rhs;
428
0
  } else if constexpr (std::is_same_v<R, bool>) { // bool special case
429
0
      return lhs < static_cast<L>(rhs);
430
0
  } else if constexpr (std::is_signed_v<R>) {
431
0
    // If 'right' is negative, then result is 'false', otherwise cast & compare.
432
0
    return rhs > 0 && lhs < static_cast<std::make_unsigned_t<R>>(rhs);
433
0
  } else {
434
0
    // If 'left' is negative, then result is 'true', otherwise cast & compare.
435
0
    return lhs < 0 || static_cast<std::make_unsigned_t<L>>(lhs) < rhs;
436
0
  }
437
0
}
438
439
template <typename I>
440
0
constexpr I log2(I value) noexcept {
441
0
  static_assert(std::is_integral_v<I>, "magic_enum::detail::log2 requires integral type.");
442
0
443
0
  if constexpr (std::is_same_v<I, bool>) { // bool special case
444
0
    return MAGIC_ENUM_ASSERT(false), value;
445
0
  } else {
446
0
    auto ret = I{0};
447
0
    for (; value > I{1}; value >>= I{1}, ++ret) {}
448
0
449
0
    return ret;
450
0
  }
451
0
}
452
453
#if defined(__cpp_lib_array_constexpr) && __cpp_lib_array_constexpr >= 201603L
454
#  define MAGIC_ENUM_ARRAY_CONSTEXPR 1
455
#else
456
template <typename T, std::size_t N, std::size_t... I>
457
constexpr std::array<std::remove_cv_t<T>, N> to_array(T (&a)[N], std::index_sequence<I...>) noexcept {
458
  return {{a[I]...}};
459
}
460
#endif
461
462
template <typename T>
463
inline constexpr bool is_enum_v = std::is_enum_v<T> && std::is_same_v<T, std::decay_t<T>>;
464
465
template <typename E>
466
constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept {
467
  static_assert(is_enum_v<E>, "magic_enum::detail::n requires enum type.");
468
469
  if constexpr (supported<E>::value) {
470
#if defined(MAGIC_ENUM_GET_TYPE_NAME_BUILTIN)
471
    constexpr auto name_ptr = MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(E);
472
    constexpr auto name = name_ptr ? str_view{name_ptr, std::char_traits<char>::length(name_ptr)} : str_view{};
473
#elif defined(__clang__)
474
    str_view name;
475
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
476
      static_assert(always_false_v<E>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
477
      return str_view{};
478
    } else {
479
      name.size_ = sizeof(__PRETTY_FUNCTION__) - 36;
480
      name.str_ = __PRETTY_FUNCTION__ + 34;
481
    }
482
#elif defined(__GNUC__)
483
    auto name = str_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1};
484
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
485
      static_assert(always_false_v<E>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
486
      return str_view{};
487
    } else if (name.str_[name.size_ - 1] == ']') {
488
      name.size_ -= 50;
489
      name.str_ += 49;
490
    } else {
491
      name.size_ -= 40;
492
      name.str_ += 37;
493
    }
494
#elif defined(_MSC_VER)
495
    // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284).
496
    str_view name;
497
    name.str_ = __FUNCSIG__;
498
    name.str_ += 40;
499
    name.size_ += sizeof(__FUNCSIG__) - 57;
500
#else
501
    auto name = str_view{};
502
#endif
503
    std::size_t p = 0;
504
    for (std::size_t i = name.size_; i > 0; --i) {
505
      if (name.str_[i] == ':') {
506
        p = i + 1;
507
        break;
508
      }
509
    }
510
    if (p > 0) {
511
      name.size_ -= p;
512
      name.str_ += p;
513
    }
514
    return name;
515
  } else {
516
    return str_view{}; // Unsupported compiler or Invalid customize.
517
  }
518
}
519
520
template <typename E>
521
constexpr auto type_name() noexcept {
522
  [[maybe_unused]] constexpr auto custom = customize::enum_type_name<E>();
523
  static_assert(std::is_same_v<std::decay_t<decltype(custom)>, customize::customize_t>, "magic_enum::customize requires customize_t type.");
524
  if constexpr (custom.first == customize::detail::customize_tag::custom_tag) {
525
    constexpr auto name = custom.second;
526
    static_assert(!name.empty(), "magic_enum::customize requires not empty string.");
527
    return static_str<name.size()>{name};
528
  } else if constexpr (custom.first == customize::detail::customize_tag::invalid_tag) {
529
    return static_str<0>{};
530
  } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) {
531
    constexpr auto name = n<E>();
532
    return static_str<name.size_>{name};
533
  } else {
534
    static_assert(always_false_v<E>, "magic_enum::customize invalid.");
535
  }
536
}
537
538
template <typename E>
539
inline constexpr auto type_name_v = type_name<E>();
540
541
template <auto V>
542
0
constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept {
543
0
  static_assert(is_enum_v<decltype(V)>, "magic_enum::detail::n requires enum type.");
544
0
545
0
  if constexpr (supported<decltype(V)>::value) {
546
0
#if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN)
547
0
    constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V);
548
0
    auto name = name_ptr ? str_view{name_ptr, std::char_traits<char>::length(name_ptr)} : str_view{};
549
0
#elif defined(__clang__)
550
0
    str_view name;
551
0
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
552
0
      static_assert(always_false_v<decltype(V)>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
553
0
      return str_view{};
554
0
    } else {
555
0
      name.size_ = sizeof(__PRETTY_FUNCTION__) - 36;
556
0
      name.str_ = __PRETTY_FUNCTION__ + 34;
557
0
    }
558
0
    if (name.size_ > 22 && name.str_[0] == '(' && name.str_[1] == 'a' && name.str_[10] == ' ' && name.str_[22] == ':') {
559
0
      name.size_ -= 23;
560
0
      name.str_ += 23;
561
0
    }
562
0
    if (name.str_[0] == '(' || name.str_[0] == '-' || (name.str_[0] >= '0' && name.str_[0] <= '9')) {
563
0
      name = str_view{};
564
0
    }
565
0
#elif defined(__GNUC__)
566
0
    auto name = str_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1};
567
0
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
568
0
      static_assert(always_false_v<decltype(V)>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
569
0
      return str_view{};
570
0
    } else if (name.str_[name.size_ - 1] == ']') {
571
0
      name.size_ -= 55;
572
0
      name.str_ += 54;
573
0
    } else {
574
0
      name.size_ -= 40;
575
0
      name.str_ += 37;
576
0
    }
577
0
    if (name.str_[0] == '(') {
578
0
      name = str_view{};
579
0
    }
580
0
#elif defined(_MSC_VER)
581
0
    str_view name;
582
0
    if ((__FUNCSIG__[5] == '_' && __FUNCSIG__[35] != '(') || (__FUNCSIG__[5] == 'c' && __FUNCSIG__[41] != '(')) {
583
0
      // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284).
584
0
      name.str_ = __FUNCSIG__;
585
0
      name.str_ += 35;
586
0
      name.size_ = sizeof(__FUNCSIG__) - 52;
587
0
    }
588
0
#else
589
0
    auto name = str_view{};
590
0
#endif
591
0
    std::size_t p = 0;
592
0
    for (std::size_t i = name.size_; i > 0; --i) {
593
0
      if (name.str_[i] == ':') {
594
0
        p = i + 1;
595
0
        break;
596
0
      }
597
0
    }
598
0
    if (p > 0) {
599
0
      name.size_ -= p;
600
0
      name.str_ += p;
601
0
    }
602
0
    return name;
603
0
  } else {
604
0
    return str_view{}; // Unsupported compiler or Invalid customize.
605
0
  }
606
0
}
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn128EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn127EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn126EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn125EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn124EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn123EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn122EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn121EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn120EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn119EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn118EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn117EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn116EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn115EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn114EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn113EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn112EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn111EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn110EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn109EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn108EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn107EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn106EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn105EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn104EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn103EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn102EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn101EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn100EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn99EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn98EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn97EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn96EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn95EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn94EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn93EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn92EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn91EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn90EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn89EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn88EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn87EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn86EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn85EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn84EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn83EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn82EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn81EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn80EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn79EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn78EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn77EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn76EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn75EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn74EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn73EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn72EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn71EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn70EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn69EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn68EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn67EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn66EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn65EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn64EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn63EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn62EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn61EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn60EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn59EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn58EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn57EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn56EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn55EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn54EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn53EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn52EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn51EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn50EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn49EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn48EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn47EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn46EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn45EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn44EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn43EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn42EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn41EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn40EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn39EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn38EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn37EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn36EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn35EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn34EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn33EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn32EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn31EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn30EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn29EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn28EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn27EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn26EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn25EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn24EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn23EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn22EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn21EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn20EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn19EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn18EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn17EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn16EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn15EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn14EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn13EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn12EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn11EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn10EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn9EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn8EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn7EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn6EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn5EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn4EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn3EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn2EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnumn1EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum0EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum1EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum2EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum3EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum4EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum5EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum6EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum7EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum8EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum9EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum10EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum11EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum12EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum13EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum14EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum15EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum16EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum17EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum18EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum19EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum20EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum21EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum22EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum23EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum24EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum25EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum26EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum27EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum28EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum29EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum30EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum31EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum32EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum33EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum34EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum35EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum36EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum37EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum38EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum39EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum40EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum41EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum42EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum43EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum44EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum45EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum46EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum47EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum48EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum49EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum50EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum51EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum52EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum53EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum54EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum55EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum56EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum57EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum58EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum59EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum60EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum61EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum62EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum63EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum64EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum65EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum66EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum67EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum68EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum69EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum70EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum71EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum72EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum73EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum74EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum75EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum76EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum77EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum78EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum79EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum80EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum81EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum82EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum83EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum84EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum85EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum86EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum87EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum88EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum89EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum90EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum91EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum92EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum93EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum94EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum95EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum96EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum97EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum98EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum99EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum100EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum101EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum102EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum103EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum104EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum105EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum106EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum107EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum108EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum109EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum110EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum111EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum112EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum113EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum114EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum115EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum116EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum117EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum118EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum119EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum120EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum121EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum122EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum123EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum124EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum125EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum126EEEDav
Unexecuted instantiation: _ZN10magic_enum6detail1nITnDaLZ22LLVMFuzzerTestOneInputE8FuzzEnum127EEEDav
607
608
#if defined(_MSC_VER) && !defined(__clang__) && _MSC_VER < 1920
609
#  define MAGIC_ENUM_VS_2017_WORKAROUND 1
610
#endif
611
612
#if defined(MAGIC_ENUM_VS_2017_WORKAROUND)
613
template <typename E, E V>
614
constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept {
615
  static_assert(is_enum_v<E>, "magic_enum::detail::n requires enum type.");
616
617
#  if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN)
618
  constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V);
619
  auto name = name_ptr ? str_view{name_ptr, std::char_traits<char>::length(name_ptr)} : str_view{};
620
#  else
621
  // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284).
622
  str_view name;
623
  name.str_ = __FUNCSIG__;
624
  name.size_ = sizeof(__FUNCSIG__) - 17;
625
  std::size_t p = 0;
626
  for (std::size_t i = name.size_; i > 0; --i) {
627
    if (name.str_[i] == ',' || name.str_[i] == ':') {
628
      p = i + 1;
629
      break;
630
    }
631
  }
632
  if (p > 0) {
633
    name.size_ -= p;
634
    name.str_ += p;
635
  }
636
  if (name.str_[0] == '(' || name.str_[0] == '-' || (name.str_[0] >= '0' && name.str_[0] <= '9')) {
637
    name = str_view{};
638
  }
639
  return name;
640
#  endif
641
}
642
#endif
643
644
template <typename E, E V>
645
0
constexpr auto enum_name() noexcept {
646
0
  [[maybe_unused]] constexpr auto custom = customize::enum_name<E>(V);
647
0
  static_assert(std::is_same_v<std::decay_t<decltype(custom)>, customize::customize_t>, "magic_enum::customize requires customize_t type.");
648
0
  if constexpr (custom.first == customize::detail::customize_tag::custom_tag) {
649
0
    constexpr auto name = custom.second;
650
0
    static_assert(!name.empty(), "magic_enum::customize requires not empty string.");
651
0
    return static_str<name.size()>{name};
652
0
  } else if constexpr (custom.first == customize::detail::customize_tag::invalid_tag) {
653
0
    return static_str<0>{};
654
0
  } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) {
655
0
#if defined(MAGIC_ENUM_VS_2017_WORKAROUND)
656
0
    constexpr auto name = n<E, V>();
657
0
#else
658
0
    constexpr auto name = n<V>();
659
0
#endif
660
0
    return static_str<name.size_ - prefix_length_or_zero<E>>{name.str_ + prefix_length_or_zero<E>};
661
0
  } else {
662
0
    static_assert(always_false_v<E>, "magic_enum::customize invalid.");
663
0
  }
664
0
}
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_n5EEEDav
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_0EEEDav
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_10EEEDav
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_11EEEDav
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_12EEEDav
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_13EEEDav
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail9enum_nameIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnT_LS2_14EEEDav
665
666
template <typename E, E V>
667
inline constexpr auto enum_name_v = enum_name<E, V>();
668
669
// CWG1766: Values outside the range of the values of an enumeration
670
// https://reviews.llvm.org/D130058, https://reviews.llvm.org/D131307
671
#if defined(__clang__) && __clang_major__ >= 16
672
template <typename E, auto V, typename = void>
673
inline constexpr bool is_enum_constexpr_static_cast_valid = false;
674
template <typename E, auto V>
675
inline constexpr bool is_enum_constexpr_static_cast_valid<E, V, std::void_t<std::integral_constant<E, static_cast<E>(V)>>> = true;
676
#else
677
template <typename, auto>
678
inline constexpr bool is_enum_constexpr_static_cast_valid = true;
679
#endif
680
681
template <typename E, auto V>
682
0
constexpr bool is_valid() noexcept {
683
0
  if constexpr (is_enum_constexpr_static_cast_valid<E, V>) {
684
0
    constexpr E v = static_cast<E>(V);
685
0
    [[maybe_unused]] constexpr auto custom = customize::enum_name<E>(v);
686
0
    static_assert(std::is_same_v<std::decay_t<decltype(custom)>, customize::customize_t>, "magic_enum::customize requires customize_t type.");
687
0
    if constexpr (custom.first == customize::detail::customize_tag::custom_tag) {
688
0
      constexpr auto name = custom.second;
689
0
      static_assert(!name.empty(), "magic_enum::customize requires not empty string.");
690
0
      return name.size() != 0;
691
0
    } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) {
692
0
#if defined(MAGIC_ENUM_VS_2017_WORKAROUND)
693
0
      return n<E, v>().size_ != 0;
694
0
#else
695
0
      return n<v>().size_ != 0;
696
0
#endif
697
0
    } else {
698
0
      return false;
699
0
    }
700
0
  } else {
701
0
    return false;
702
0
  }
703
0
}
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin128EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin127EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin126EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin125EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin124EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin123EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin122EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin121EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin120EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin119EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin118EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin117EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin116EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin115EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin114EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin113EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin112EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin111EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin110EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin109EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin108EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin107EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin106EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin105EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin104EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin103EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin102EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin101EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin100EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin99EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin98EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin97EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin96EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin95EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin94EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin93EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin92EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin91EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin90EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin89EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin88EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin87EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin86EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin85EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin84EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin83EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin82EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin81EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin80EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin79EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin78EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin77EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin76EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin75EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin74EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin73EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin72EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin71EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin70EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin69EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin68EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin67EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin66EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin65EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin64EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin63EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin62EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin61EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin60EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin59EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin58EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin57EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin56EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin55EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin54EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin53EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin52EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin51EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin50EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin49EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin48EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin47EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin46EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin45EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin44EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin43EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin42EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin41EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin40EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin39EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin38EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin37EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin36EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin35EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin34EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin33EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin32EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin31EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin30EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin29EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin28EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin27EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin26EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin25EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin24EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin23EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin22EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin21EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin20EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin19EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin18EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin17EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin16EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin15EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin14EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin13EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin12EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin11EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin10EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin9EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin8EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin7EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin6EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin5EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin4EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin3EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin2EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLin1EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi0EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi1EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi2EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi3EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi4EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi5EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi6EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi7EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi8EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi9EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi10EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi11EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi12EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi13EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi14EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi15EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi16EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi17EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi18EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi19EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi20EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi21EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi22EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi23EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi24EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi25EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi26EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi27EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi28EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi29EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi30EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi31EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi32EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi33EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi34EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi35EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi36EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi37EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi38EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi39EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi40EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi41EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi42EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi43EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi44EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi45EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi46EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi47EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi48EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi49EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi50EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi51EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi52EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi53EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi54EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi55EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi56EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi57EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi58EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi59EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi60EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi61EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi62EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi63EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi64EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi65EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi66EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi67EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi68EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi69EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi70EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi71EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi72EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi73EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi74EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi75EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi76EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi77EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi78EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi79EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi80EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi81EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi82EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi83EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi84EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi85EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi86EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi87EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi88EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi89EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi90EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi91EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi92EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi93EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi94EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi95EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi96EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi97EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi98EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi99EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi100EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi101EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi102EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi103EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi104EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi105EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi106EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi107EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi108EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi109EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi110EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi111EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi112EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi113EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi114EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi115EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi116EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi117EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi118EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi119EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi120EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi121EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi122EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi123EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi124EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi125EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi126EEEbv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum6detail8is_validIZ22LLVMFuzzerTestOneInputE8FuzzEnumTnDaLi127EEEbv
704
705
enum class enum_subtype {
706
  common,
707
  flags
708
};
709
710
template <typename E, int O, enum_subtype S, typename U = std::underlying_type_t<E>>
711
0
constexpr U ualue(std::size_t i) noexcept {
712
0
  if constexpr (std::is_same_v<U, bool>) { // bool special case
713
0
    static_assert(O == 0, "magic_enum::detail::ualue requires valid offset.");
714
0
715
0
    return static_cast<U>(i);
716
0
  } else if constexpr (S == enum_subtype::flags) {
717
0
    return static_cast<U>(U{1} << static_cast<U>(static_cast<int>(i) + O));
718
0
  } else {
719
0
    return static_cast<U>(static_cast<int>(i) + O);
720
0
  }
721
0
}
722
723
template <typename E, int O, enum_subtype S, typename U = std::underlying_type_t<E>>
724
0
constexpr E value(std::size_t i) noexcept {
725
0
  return static_cast<E>(ualue<E, O, S>(i));
726
0
}
727
728
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
729
0
constexpr int reflected_min() noexcept {
730
0
  if constexpr (S == enum_subtype::flags) {
731
0
    return 0;
732
0
  } else {
733
0
    constexpr auto lhs = range_min<E>::value;
734
0
    constexpr auto rhs = (std::numeric_limits<U>::min)();
735
0
736
0
    if constexpr (cmp_less(rhs, lhs)) {
737
0
      return lhs;
738
0
    } else {
739
0
      return rhs;
740
0
    }
741
0
  }
742
0
}
743
744
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
745
0
constexpr int reflected_max() noexcept {
746
0
  if constexpr (S == enum_subtype::flags) {
747
0
    return std::numeric_limits<U>::digits - 1;
748
0
  } else {
749
0
    constexpr auto lhs = range_max<E>::value;
750
0
    constexpr auto rhs = (std::numeric_limits<U>::max)();
751
0
752
0
    if constexpr (cmp_less(lhs, rhs)) {
753
0
      return lhs;
754
0
    } else {
755
0
      return rhs;
756
0
    }
757
0
  }
758
0
}
759
760
#define MAGIC_ENUM_FOR_EACH_256(T)                                                                                                                                                                 \
761
  T(  0)T(  1)T(  2)T(  3)T(  4)T(  5)T(  6)T(  7)T(  8)T(  9)T( 10)T( 11)T( 12)T( 13)T( 14)T( 15)T( 16)T( 17)T( 18)T( 19)T( 20)T( 21)T( 22)T( 23)T( 24)T( 25)T( 26)T( 27)T( 28)T( 29)T( 30)T( 31) \
762
  T( 32)T( 33)T( 34)T( 35)T( 36)T( 37)T( 38)T( 39)T( 40)T( 41)T( 42)T( 43)T( 44)T( 45)T( 46)T( 47)T( 48)T( 49)T( 50)T( 51)T( 52)T( 53)T( 54)T( 55)T( 56)T( 57)T( 58)T( 59)T( 60)T( 61)T( 62)T( 63) \
763
  T( 64)T( 65)T( 66)T( 67)T( 68)T( 69)T( 70)T( 71)T( 72)T( 73)T( 74)T( 75)T( 76)T( 77)T( 78)T( 79)T( 80)T( 81)T( 82)T( 83)T( 84)T( 85)T( 86)T( 87)T( 88)T( 89)T( 90)T( 91)T( 92)T( 93)T( 94)T( 95) \
764
  T( 96)T( 97)T( 98)T( 99)T(100)T(101)T(102)T(103)T(104)T(105)T(106)T(107)T(108)T(109)T(110)T(111)T(112)T(113)T(114)T(115)T(116)T(117)T(118)T(119)T(120)T(121)T(122)T(123)T(124)T(125)T(126)T(127) \
765
  T(128)T(129)T(130)T(131)T(132)T(133)T(134)T(135)T(136)T(137)T(138)T(139)T(140)T(141)T(142)T(143)T(144)T(145)T(146)T(147)T(148)T(149)T(150)T(151)T(152)T(153)T(154)T(155)T(156)T(157)T(158)T(159) \
766
  T(160)T(161)T(162)T(163)T(164)T(165)T(166)T(167)T(168)T(169)T(170)T(171)T(172)T(173)T(174)T(175)T(176)T(177)T(178)T(179)T(180)T(181)T(182)T(183)T(184)T(185)T(186)T(187)T(188)T(189)T(190)T(191) \
767
  T(192)T(193)T(194)T(195)T(196)T(197)T(198)T(199)T(200)T(201)T(202)T(203)T(204)T(205)T(206)T(207)T(208)T(209)T(210)T(211)T(212)T(213)T(214)T(215)T(216)T(217)T(218)T(219)T(220)T(221)T(222)T(223) \
768
  T(224)T(225)T(226)T(227)T(228)T(229)T(230)T(231)T(232)T(233)T(234)T(235)T(236)T(237)T(238)T(239)T(240)T(241)T(242)T(243)T(244)T(245)T(246)T(247)T(248)T(249)T(250)T(251)T(252)T(253)T(254)T(255)
769
770
template <typename E, enum_subtype S, std::size_t Size, int Min, std::size_t I>
771
0
constexpr void valid_count(bool* valid, std::size_t& count) noexcept {
772
0
#define MAGIC_ENUM_V(O)                                     \
773
0
  if constexpr ((I + O) < Size) {                           \
774
0
    if constexpr (is_valid<E, ualue<E, Min, S>(I + O)>()) { \
775
0
      valid[I + O] = true;                                  \
776
0
      ++count;                                              \
777
0
    }                                                       \
778
0
  }
779
0
780
0
  MAGIC_ENUM_FOR_EACH_256(MAGIC_ENUM_V)
781
0
782
0
  if constexpr ((I + 256) < Size) {
783
0
    valid_count<E, S, Size, Min, I + 256>(valid, count);
784
0
  }
785
0
#undef MAGIC_ENUM_V
786
0
}
787
788
template <std::size_t N>
789
struct valid_count_t {
790
  std::size_t count = 0;
791
  bool valid[N] = {};
792
};
793
794
template <typename E, enum_subtype S, std::size_t Size, int Min>
795
0
constexpr auto valid_count() noexcept {
796
0
  valid_count_t<Size> vc;
797
0
  valid_count<E, S, Size, Min, 0>(vc.valid, vc.count);
798
0
  return vc;
799
0
}
800
801
template <typename E, enum_subtype S, std::size_t Size, int Min>
802
0
constexpr auto values() noexcept {
803
0
  constexpr auto vc = valid_count<E, S, Size, Min>();
804
0
805
0
  if constexpr (vc.count > 0) {
806
0
#if defined(MAGIC_ENUM_ARRAY_CONSTEXPR)
807
0
    std::array<E, vc.count> values = {};
808
0
#else
809
0
    E values[vc.count] = {};
810
0
#endif
811
0
    for (std::size_t i = 0, v = 0; v < vc.count; ++i) {
812
0
      if (vc.valid[i]) {
813
0
        values[v++] = value<E, Min, S>(i);
814
0
      }
815
0
    }
816
0
#if defined(MAGIC_ENUM_ARRAY_CONSTEXPR)
817
0
    return values;
818
0
#else
819
0
    return to_array(values, std::make_index_sequence<vc.count>{});
820
0
#endif
821
0
  } else {
822
0
    return std::array<E, 0>{};
823
0
  }
824
0
}
825
826
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
827
0
constexpr auto values() noexcept {
828
0
  constexpr auto min = reflected_min<E, S>();
829
0
  constexpr auto max = reflected_max<E, S>();
830
0
  constexpr auto range_size = max - min + 1;
831
0
  static_assert(range_size > 0, "magic_enum::enum_range requires valid size.");
832
0
833
0
  return values<E, S, range_size, min>();
834
0
}
835
836
template <typename E, typename U = std::underlying_type_t<E>>
837
0
constexpr enum_subtype subtype(std::true_type) noexcept {
838
0
  if constexpr (std::is_same_v<U, bool>) { // bool special case
839
0
    return enum_subtype::common;
840
0
  } else if constexpr (has_is_flags<E>::value) {
841
0
    return customize::enum_range<E>::is_flags ? enum_subtype::flags : enum_subtype::common;
842
0
  } else {
843
0
#if defined(MAGIC_ENUM_AUTO_IS_FLAGS)
844
0
    constexpr auto flags_values = values<E, enum_subtype::flags>();
845
0
    constexpr auto default_values = values<E, enum_subtype::common>();
846
0
    if (flags_values.size() == 0 || default_values.size() > flags_values.size()) {
847
0
      return enum_subtype::common;
848
0
    }
849
0
    for (std::size_t i = 0; i < default_values.size(); ++i) {
850
0
      const auto v = static_cast<U>(default_values[i]);
851
0
      if (v != 0 && (v & (v - 1)) != 0) {
852
0
        return enum_subtype::common;
853
0
      }
854
0
    }
855
0
    return enum_subtype::flags;
856
0
#else
857
0
    return enum_subtype::common;
858
0
#endif
859
0
  }
860
0
}
861
862
template <typename T>
863
constexpr enum_subtype subtype(std::false_type) noexcept {
864
  // For non-enum type return default common subtype.
865
  return enum_subtype::common;
866
}
867
868
template <typename E, typename D = std::decay_t<E>>
869
inline constexpr auto subtype_v = subtype<D>(std::is_enum<D>{});
870
871
template <typename E, enum_subtype S>
872
inline constexpr auto values_v = values<E, S>();
873
874
template <typename E, enum_subtype S, typename D = std::decay_t<E>>
875
using values_t = decltype((values_v<D, S>));
876
877
template <typename E, enum_subtype S>
878
inline constexpr auto count_v = values_v<E, S>.size();
879
880
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
881
inline constexpr auto min_v = (count_v<E, S> > 0) ? static_cast<U>(values_v<E, S>.front()) : U{0};
882
883
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
884
inline constexpr auto max_v = (count_v<E, S> > 0) ? static_cast<U>(values_v<E, S>.back()) : U{0};
885
886
template <typename E, enum_subtype S, std::size_t... I>
887
0
constexpr auto names(std::index_sequence<I...>) noexcept {
888
0
  constexpr auto names = std::array<string_view, sizeof...(I)>{{enum_name_v<E, values_v<E, S>[I]>.str()...}};
889
0
  return names;
890
0
}
891
892
template <typename E, enum_subtype S>
893
inline constexpr auto names_v = names<E, S>(std::make_index_sequence<count_v<E, S>>{});
894
895
template <typename E, enum_subtype S, typename D = std::decay_t<E>>
896
using names_t = decltype((names_v<D, S>));
897
898
template <typename E, enum_subtype S, std::size_t... I>
899
0
constexpr auto entries(std::index_sequence<I...>) noexcept {
900
0
  constexpr auto entries = std::array<std::pair<E, string_view>, sizeof...(I)>{{{values_v<E, S>[I], enum_name_v<E, values_v<E, S>[I]>.str()}...}};
901
0
  return entries;
902
0
}
903
904
template <typename E, enum_subtype S>
905
inline constexpr auto entries_v = entries<E, S>(std::make_index_sequence<count_v<E, S>>{});
906
907
template <typename E, enum_subtype S, typename D = std::decay_t<E>>
908
using entries_t = decltype((entries_v<D, S>));
909
910
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
911
0
constexpr bool is_sparse() noexcept {
912
0
  if constexpr (count_v<E, S> == 0) {
913
0
    return false;
914
0
  } else if constexpr (std::is_same_v<U, bool>) { // bool special case
915
0
    return false;
916
0
  } else {
917
0
    constexpr auto max = (S == enum_subtype::flags) ? log2(max_v<E, S>) : max_v<E, S>;
918
0
    constexpr auto min = (S == enum_subtype::flags) ? log2(min_v<E, S>) : min_v<E, S>;
919
0
    constexpr auto range_size = max - min + 1;
920
0
921
0
    return range_size != count_v<E, S>;
922
0
  }
923
0
}
924
925
template <typename E, enum_subtype S = subtype_v<E>>
926
inline constexpr bool is_sparse_v = is_sparse<E, S>();
927
928
template <typename E, enum_subtype S>
929
struct is_reflected
930
#if defined(MAGIC_ENUM_NO_CHECK_REFLECTED_ENUM)
931
  : std::true_type {};
932
#else
933
  : std::bool_constant<std::is_enum_v<E> && (count_v<E, S> != 0)> {};
934
#endif
935
936
template <typename E, enum_subtype S>
937
inline constexpr bool is_reflected_v = is_reflected<std::decay_t<E>, S>{};
938
939
template <bool, typename R>
940
struct enable_if_enum {};
941
942
template <typename R>
943
struct enable_if_enum<true, R> {
944
  using type = R;
945
  static_assert(supported<R>::value, "magic_enum unsupported compiler (https://github.com/Neargye/magic_enum#compiler-compatibility).");
946
};
947
948
template <typename T, typename R, typename BinaryPredicate = std::equal_to<>, typename D = std::decay_t<T>>
949
using enable_if_t = typename enable_if_enum<std::is_enum_v<D> && std::is_invocable_r_v<bool, BinaryPredicate, char_type, char_type>, R>::type;
950
951
template <typename T, std::enable_if_t<std::is_enum_v<std::decay_t<T>>, int> = 0>
952
using enum_concept = T;
953
954
template <typename T, bool = std::is_enum_v<T>>
955
struct is_scoped_enum : std::false_type {};
956
957
template <typename T>
958
struct is_scoped_enum<T, true> : std::bool_constant<!std::is_convertible_v<T, std::underlying_type_t<T>>> {};
959
960
template <typename T, bool = std::is_enum_v<T>>
961
struct is_unscoped_enum : std::false_type {};
962
963
template <typename T>
964
struct is_unscoped_enum<T, true> : std::bool_constant<std::is_convertible_v<T, std::underlying_type_t<T>>> {};
965
966
template <typename T, bool = std::is_enum_v<std::decay_t<T>>>
967
struct underlying_type {};
968
969
template <typename T>
970
struct underlying_type<T, true> : std::underlying_type<std::decay_t<T>> {};
971
972
#if defined(MAGIC_ENUM_ENABLE_HASH) || defined(MAGIC_ENUM_ENABLE_HASH_SWITCH)
973
974
template <typename Value, typename = void>
975
struct constexpr_hash_t;
976
977
template <typename Value>
978
struct constexpr_hash_t<Value, std::enable_if_t<is_enum_v<Value>>> {
979
  constexpr auto operator()(Value value) const noexcept {
980
    using U = typename underlying_type<Value>::type;
981
    if constexpr (std::is_same_v<U, bool>) { // bool special case
982
      return static_cast<std::size_t>(value);
983
    } else {
984
      return static_cast<U>(value);
985
    }
986
  }
987
  using secondary_hash = constexpr_hash_t;
988
};
989
990
template <typename Value>
991
struct constexpr_hash_t<Value, std::enable_if_t<std::is_same_v<Value, string_view>>> {
992
  static constexpr std::uint32_t crc_table[256] {
993
    0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L,
994
    0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L,
995
    0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L,
996
    0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L,
997
    0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
998
    0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L,
999
    0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL,
1000
    0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL,
1001
    0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L,
1002
    0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
1003
    0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L,
1004
    0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L,
1005
    0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL,
1006
    0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L,
1007
    0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
1008
    0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL,
1009
    0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L,
1010
    0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L,
1011
    0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L,
1012
    0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
1013
    0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL,
1014
    0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L,
1015
    0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL,
1016
    0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL,
1017
    0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
1018
    0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L,
1019
    0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L,
1020
    0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L,
1021
    0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL,
1022
    0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
1023
    0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL,
1024
    0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL
1025
  };
1026
  constexpr std::uint32_t operator()(string_view value) const noexcept {
1027
    auto crc = static_cast<std::uint32_t>(0xffffffffL);
1028
    for (const auto c : value) {
1029
      crc = (crc >> 8) ^ crc_table[(crc ^ static_cast<std::uint32_t>(c)) & 0xff];
1030
    }
1031
    return crc ^ 0xffffffffL;
1032
  }
1033
1034
  struct secondary_hash {
1035
    constexpr std::uint32_t operator()(string_view value) const noexcept {
1036
      auto acc = static_cast<std::uint64_t>(2166136261ULL);
1037
      for (const auto c : value) {
1038
        acc = ((acc ^ static_cast<std::uint64_t>(c)) * static_cast<std::uint64_t>(16777619ULL)) & (std::numeric_limits<std::uint32_t>::max)();
1039
      }
1040
      return static_cast<std::uint32_t>(acc);
1041
    }
1042
  };
1043
};
1044
1045
template <typename Hash>
1046
inline constexpr Hash hash_v{};
1047
1048
template <auto* GlobValues, typename Hash>
1049
constexpr auto calculate_cases(std::size_t Page) noexcept {
1050
  constexpr std::array values = *GlobValues;
1051
  constexpr std::size_t size = values.size();
1052
1053
  using switch_t = std::invoke_result_t<Hash, typename decltype(values)::value_type>;
1054
  static_assert(std::is_integral_v<switch_t> && !std::is_same_v<switch_t, bool>);
1055
  const std::size_t values_to = (std::min)(static_cast<std::size_t>(256), size - Page);
1056
1057
  std::array<switch_t, 256> result{};
1058
  auto fill = result.begin();
1059
  {
1060
    auto first = values.begin() + static_cast<std::ptrdiff_t>(Page);
1061
    auto last = values.begin() + static_cast<std::ptrdiff_t>(Page + values_to);
1062
    while (first != last) {
1063
      *fill++ = hash_v<Hash>(*first++);
1064
    }
1065
  }
1066
1067
  // dead cases, try to avoid case collisions
1068
  for (switch_t last_value = result[values_to - 1]; fill != result.end() && last_value != (std::numeric_limits<switch_t>::max)(); *fill++ = ++last_value) {
1069
  }
1070
1071
  {
1072
    auto it = result.begin();
1073
    auto last_value = (std::numeric_limits<switch_t>::min)();
1074
    for (; fill != result.end(); *fill++ = last_value++) {
1075
      while (last_value == *it) {
1076
        ++last_value, ++it;
1077
      }
1078
    }
1079
  }
1080
1081
  return result;
1082
}
1083
1084
template <typename R, typename F, typename... Args>
1085
constexpr R invoke_r(F&& f, Args&&... args) noexcept(std::is_nothrow_invocable_r_v<R, F, Args...>) {
1086
  if constexpr (std::is_void_v<R>) {
1087
    std::forward<F>(f)(std::forward<Args>(args)...);
1088
  } else {
1089
    return static_cast<R>(std::forward<F>(f)(std::forward<Args>(args)...));
1090
  }
1091
}
1092
1093
enum class case_call_t {
1094
  index,
1095
  value
1096
};
1097
1098
template <typename T = void>
1099
inline constexpr auto default_result_type_lambda = []() noexcept(std::is_nothrow_default_constructible_v<T>) { return T{}; };
1100
1101
template <>
1102
inline constexpr auto default_result_type_lambda<void> = []() noexcept {};
1103
1104
template <auto* Arr, typename Hash>
1105
constexpr bool has_duplicate() noexcept {
1106
  using value_t = std::decay_t<decltype((*Arr)[0])>;
1107
  using hash_value_t = std::invoke_result_t<Hash, value_t>;
1108
  std::array<hash_value_t, Arr->size()> hashes{};
1109
  std::size_t size = 0;
1110
  for (auto elem : *Arr) {
1111
    hashes[size] = hash_v<Hash>(elem);
1112
    for (auto i = size++; i > 0; --i) {
1113
      if (hashes[i] < hashes[i - 1]) {
1114
        auto tmp = hashes[i];
1115
        hashes[i] = hashes[i - 1];
1116
        hashes[i - 1] = tmp;
1117
      } else if (hashes[i] == hashes[i - 1]) {
1118
        return false;
1119
      } else {
1120
        break;
1121
      }
1122
    }
1123
  }
1124
  return true;
1125
}
1126
1127
#define MAGIC_ENUM_CASE(val)                                                                                                  \
1128
  case cases[val]:                                                                                                            \
1129
    if constexpr ((val) + Page < size) {                                                                                      \
1130
      if (!pred(values[val + Page], searched)) {                                                                              \
1131
        break;                                                                                                                \
1132
      }                                                                                                                       \
1133
      if constexpr (CallValue == case_call_t::index) {                                                                        \
1134
        if constexpr (std::is_invocable_r_v<result_t, Lambda, std::integral_constant<std::size_t, val + Page>>) {             \
1135
          return detail::invoke_r<result_t>(std::forward<Lambda>(lambda), std::integral_constant<std::size_t, val + Page>{}); \
1136
        } else if constexpr (std::is_invocable_v<Lambda, std::integral_constant<std::size_t, val + Page>>) {                  \
1137
          MAGIC_ENUM_ASSERT(false && "magic_enum::detail::constexpr_switch wrong result type.");                                         \
1138
        }                                                                                                                     \
1139
      } else if constexpr (CallValue == case_call_t::value) {                                                                 \
1140
        if constexpr (std::is_invocable_r_v<result_t, Lambda, enum_constant<values[val + Page]>>) {                           \
1141
          return detail::invoke_r<result_t>(std::forward<Lambda>(lambda), enum_constant<values[val + Page]>{});               \
1142
        } else if constexpr (std::is_invocable_r_v<result_t, Lambda, enum_constant<values[val + Page]>>) {                    \
1143
          MAGIC_ENUM_ASSERT(false && "magic_enum::detail::constexpr_switch wrong result type.");                                         \
1144
        }                                                                                                                     \
1145
      }                                                                                                                       \
1146
      break;                                                                                                                  \
1147
    } else [[fallthrough]];
1148
1149
template <auto* GlobValues,
1150
          case_call_t CallValue,
1151
          std::size_t Page = 0,
1152
          typename Hash = constexpr_hash_t<typename std::decay_t<decltype(*GlobValues)>::value_type>,
1153
          typename BinaryPredicate = std::equal_to<>,
1154
          typename Lambda,
1155
          typename ResultGetterType>
1156
constexpr decltype(auto) constexpr_switch(
1157
    Lambda&& lambda,
1158
    typename std::decay_t<decltype(*GlobValues)>::value_type searched,
1159
    ResultGetterType&& def,
1160
    BinaryPredicate&& pred = {}) {
1161
  using result_t = std::invoke_result_t<ResultGetterType>;
1162
  using hash_t = std::conditional_t<has_duplicate<GlobValues, Hash>(), Hash, typename Hash::secondary_hash>;
1163
  static_assert(has_duplicate<GlobValues, hash_t>(), "magic_enum::detail::constexpr_switch duplicated hash found, please report it: https://github.com/Neargye/magic_enum/issues.");
1164
  constexpr std::array values = *GlobValues;
1165
  constexpr std::size_t size = values.size();
1166
  constexpr std::array cases = calculate_cases<GlobValues, hash_t>(Page);
1167
1168
  switch (hash_v<hash_t>(searched)) {
1169
    MAGIC_ENUM_FOR_EACH_256(MAGIC_ENUM_CASE)
1170
    default:
1171
      if constexpr (size > 256 + Page) {
1172
        return constexpr_switch<GlobValues, CallValue, Page + 256, Hash>(std::forward<Lambda>(lambda), searched, std::forward<ResultGetterType>(def));
1173
      }
1174
      break;
1175
  }
1176
  return def();
1177
}
1178
1179
#undef MAGIC_ENUM_CASE
1180
1181
#endif
1182
1183
} // namespace magic_enum::detail
1184
1185
// Checks is magic_enum supported compiler.
1186
inline constexpr bool is_magic_enum_supported = detail::supported<void>::value;
1187
1188
template <typename T>
1189
using Enum = detail::enum_concept<T>;
1190
1191
// Checks whether T is an Unscoped enumeration type.
1192
// Provides the member constant value which is equal to true, if T is an [Unscoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Unscoped_enumeration) type. Otherwise, value is equal to false.
1193
template <typename T>
1194
struct is_unscoped_enum : detail::is_unscoped_enum<T> {};
1195
1196
template <typename T>
1197
inline constexpr bool is_unscoped_enum_v = is_unscoped_enum<T>::value;
1198
1199
// Checks whether T is an Scoped enumeration type.
1200
// Provides the member constant value which is equal to true, if T is an [Scoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Scoped_enumerations) type. Otherwise, value is equal to false.
1201
template <typename T>
1202
struct is_scoped_enum : detail::is_scoped_enum<T> {};
1203
1204
template <typename T>
1205
inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
1206
1207
// If T is a complete enumeration type, provides a member typedef type that names the underlying type of T.
1208
// Otherwise, if T is not an enumeration type, there is no member type. Otherwise (T is an incomplete enumeration type), the program is ill-formed.
1209
template <typename T>
1210
struct underlying_type : detail::underlying_type<T> {};
1211
1212
template <typename T>
1213
using underlying_type_t = typename underlying_type<T>::type;
1214
1215
template <auto V>
1216
using enum_constant = detail::enum_constant<V>;
1217
1218
// Returns type name of enum.
1219
template <typename E>
1220
[[nodiscard]] constexpr auto enum_type_name() noexcept -> detail::enable_if_t<E, string_view> {
1221
  constexpr string_view name = detail::type_name_v<std::decay_t<E>>.str();
1222
  static_assert(!name.empty(), "magic_enum::enum_type_name enum type does not have a name.");
1223
1224
  return name;
1225
}
1226
1227
// Returns number of enum values.
1228
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1229
2.05k
[[nodiscard]] constexpr auto enum_count() noexcept -> detail::enable_if_t<E, std::size_t> {
1230
2.05k
  return detail::count_v<std::decay_t<E>, S>;
1231
2.05k
}
1232
1233
// Returns enum value at specified index.
1234
// No bounds checking is performed: the behavior is undefined if index >= number of enum values.
1235
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1236
38.0k
[[nodiscard]] constexpr auto enum_value(std::size_t index) noexcept -> detail::enable_if_t<E, std::decay_t<E>> {
1237
38.0k
  using D = std::decay_t<E>;
1238
38.0k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1239
1240
38.0k
  if constexpr (detail::is_sparse_v<D, S>) {
1241
38.0k
    return MAGIC_ENUM_ASSERT(index < detail::count_v<D, S>), detail::values_v<D, S>[index];
1242
  } else {
1243
    constexpr auto min = (S == detail::enum_subtype::flags) ? detail::log2(detail::min_v<D, S>) : detail::min_v<D, S>;
1244
1245
    return MAGIC_ENUM_ASSERT(index < detail::count_v<D, S>), detail::value<D, min, S>(index);
1246
  }
1247
38.0k
}
1248
1249
// Returns enum value at specified index.
1250
template <typename E, std::size_t I, detail::enum_subtype S = detail::subtype_v<E>>
1251
[[nodiscard]] constexpr auto enum_value() noexcept -> detail::enable_if_t<E, std::decay_t<E>> {
1252
  using D = std::decay_t<E>;
1253
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1254
  static_assert(I < detail::count_v<D, S>, "magic_enum::enum_value out of range.");
1255
1256
  return enum_value<D, S>(I);
1257
}
1258
1259
// Returns std::array with enum values, sorted by enum value.
1260
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1261
0
[[nodiscard]] constexpr auto enum_values() noexcept -> detail::enable_if_t<E, detail::values_t<E, S>> {
1262
0
  using D = std::decay_t<E>;
1263
0
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1264
0
1265
0
  return detail::values_v<D, S>;
1266
0
}
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum11enum_valuesIKZ22LLVMFuzzerTestOneInputE8FuzzEnumLNS_6detail12enum_subtypeE0EEENS3_14enable_if_enumIXaasr3stdE9is_enum_vIu7__decayIT_EEL_ZNSt3__116is_invocable_r_vIbNS8_8equal_toIvEEJccEEEEEDT8values_vIS7_XT0_EEEE4typeEv
Unexecuted instantiation: magic_enum_fuzzer.cc:_ZN10magic_enum11enum_valuesIZ22LLVMFuzzerTestOneInputE8FuzzEnumLNS_6detail12enum_subtypeE0EEENS2_14enable_if_enumIXaasr3stdE9is_enum_vIu7__decayIT_EEL_ZNSt3__116is_invocable_r_vIbNS7_8equal_toIvEEJccEEEEEDT8values_vIS6_XT0_EEEE4typeEv
1267
1268
// Returns integer value from enum value.
1269
template <typename E>
1270
[[nodiscard]] constexpr auto enum_integer(E value) noexcept -> detail::enable_if_t<E, underlying_type_t<E>> {
1271
  return static_cast<underlying_type_t<E>>(value);
1272
}
1273
1274
// Returns underlying value from enum value.
1275
template <typename E>
1276
[[nodiscard]] constexpr auto enum_underlying(E value) noexcept -> detail::enable_if_t<E, underlying_type_t<E>> {
1277
  return static_cast<underlying_type_t<E>>(value);
1278
}
1279
1280
// Obtains index in enum values from enum value.
1281
// Returns optional with index.
1282
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1283
8.23k
[[nodiscard]] constexpr auto enum_index(E value) noexcept -> detail::enable_if_t<E, optional<std::size_t>> {
1284
8.23k
  using D = std::decay_t<E>;
1285
8.23k
  using U = underlying_type_t<D>;
1286
8.23k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1287
1288
8.23k
  if constexpr (detail::is_sparse_v<D, S> || (S == detail::enum_subtype::flags)) {
1289
#if defined(MAGIC_ENUM_ENABLE_HASH)
1290
    return detail::constexpr_switch<&detail::values_v<D, S>, detail::case_call_t::index>(
1291
        [](std::size_t i) { return optional<std::size_t>{i}; },
1292
        value,
1293
        detail::default_result_type_lambda<optional<std::size_t>>);
1294
#else
1295
16.4k
    for (std::size_t i = 0; i < detail::count_v<D, S>; ++i) {
1296
16.4k
      if (enum_value<D, S>(i) == value) {
1297
8.23k
        return i;
1298
8.23k
      }
1299
16.4k
    }
1300
0
    return {}; // Invalid value or out of range.
1301
8.23k
#endif
1302
  } else {
1303
    const auto v = static_cast<U>(value);
1304
    if (v >= detail::min_v<D, S> && v <= detail::max_v<D, S>) {
1305
      return static_cast<std::size_t>(v - detail::min_v<D, S>);
1306
    }
1307
    return {}; // Invalid value or out of range.
1308
  }
1309
8.23k
}
1310
1311
// Obtains index in enum values from enum value.
1312
// Returns optional with index.
1313
template <detail::enum_subtype S, typename E>
1314
[[nodiscard]] constexpr auto enum_index(E value) noexcept -> detail::enable_if_t<E, optional<std::size_t>> {
1315
  using D = std::decay_t<E>;
1316
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1317
1318
  return enum_index<D, S>(value);
1319
}
1320
1321
// Obtains index in enum values from static storage enum variable.
1322
template <auto V, detail::enum_subtype S = detail::subtype_v<std::decay_t<decltype(V)>>>
1323
[[nodiscard]] constexpr auto enum_index() noexcept -> detail::enable_if_t<decltype(V), std::size_t> {\
1324
  using D = std::decay_t<decltype(V)>;
1325
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1326
  constexpr auto index = enum_index<D, S>(V);
1327
  static_assert(index, "magic_enum::enum_index enum value does not have a index.");
1328
1329
  return *index;
1330
}
1331
1332
// Returns name from static storage enum variable.
1333
// This version is much lighter on the compile times and is not restricted to the enum_range limitation.
1334
template <auto V>
1335
[[nodiscard]] constexpr auto enum_name() noexcept -> detail::enable_if_t<decltype(V), string_view> {
1336
  constexpr string_view name = detail::enum_name_v<std::decay_t<decltype(V)>, V>.str();
1337
  static_assert(!name.empty(), "magic_enum::enum_name enum value does not have a name.");
1338
1339
  return name;
1340
}
1341
1342
// Returns name from enum value.
1343
// If enum value does not have name or value out of range, returns empty string.
1344
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1345
[[nodiscard]] constexpr auto enum_name(E value) noexcept -> detail::enable_if_t<E, string_view> {
1346
  using D = std::decay_t<E>;
1347
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1348
1349
  if (const auto i = enum_index<D, S>(value)) {
1350
    return detail::names_v<D, S>[*i];
1351
  }
1352
  return detail::static_str<0>{}.str();
1353
}
1354
1355
// Returns name from enum value.
1356
// If enum value does not have name or value out of range, returns empty string.
1357
template <detail::enum_subtype S, typename E>
1358
[[nodiscard]] constexpr auto enum_name(E value) -> detail::enable_if_t<E, string_view> {
1359
  using D = std::decay_t<E>;
1360
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1361
1362
  return enum_name<D, S>(value);
1363
}
1364
1365
// Returns std::array with names, sorted by enum value.
1366
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1367
1.02k
[[nodiscard]] constexpr auto enum_names() noexcept -> detail::enable_if_t<E, detail::names_t<E, S>> {
1368
1.02k
  using D = std::decay_t<E>;
1369
1.02k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1370
1371
1.02k
  return detail::names_v<D, S>;
1372
1.02k
}
1373
1374
// Returns std::array with pairs (value, name), sorted by enum value.
1375
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1376
1.02k
[[nodiscard]] constexpr auto enum_entries() noexcept -> detail::enable_if_t<E, detail::entries_t<E, S>> {
1377
1.02k
  using D = std::decay_t<E>;
1378
1.02k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1379
1380
1.02k
  return detail::entries_v<D, S>;
1381
1.02k
}
1382
1383
// Allows you to write magic_enum::enum_cast<foo>("bar", magic_enum::case_insensitive);
1384
inline constexpr auto case_insensitive = detail::case_insensitive<>{};
1385
1386
// Obtains enum value from integer value.
1387
// Returns optional with enum value.
1388
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1389
3.08k
[[nodiscard]] constexpr auto enum_cast(underlying_type_t<E> value) noexcept -> detail::enable_if_t<E, optional<std::decay_t<E>>> {
1390
3.08k
  using D = std::decay_t<E>;
1391
3.08k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1392
1393
3.08k
  if constexpr (detail::is_sparse_v<D, S> || (S == detail::enum_subtype::flags)) {
1394
#if defined(MAGIC_ENUM_ENABLE_HASH)
1395
    return detail::constexpr_switch<&detail::values_v<D, S>, detail::case_call_t::value>(
1396
        [](D v) { return optional<D>{v}; },
1397
        static_cast<D>(value),
1398
        detail::default_result_type_lambda<optional<D>>);
1399
#else
1400
24.6k
    for (std::size_t i = 0; i < detail::count_v<D, S>; ++i) {
1401
21.6k
      if (value == static_cast<underlying_type_t<D>>(enum_value<D, S>(i))) {
1402
1
        return static_cast<D>(value);
1403
1
      }
1404
21.6k
    }
1405
3.08k
    return {}; // Invalid value or out of range.
1406
3.08k
#endif
1407
  } else {
1408
    if (value >= detail::min_v<D, S> && value <= detail::max_v<D, S>) {
1409
      return static_cast<D>(value);
1410
    }
1411
    return {}; // Invalid value or out of range.
1412
  }
1413
3.08k
}
1414
1415
// Obtains enum value from name.
1416
// Returns optional with enum value.
1417
template <typename E, detail::enum_subtype S = detail::subtype_v<E>, typename BinaryPredicate = std::equal_to<>>
1418
3.08k
[[nodiscard]] constexpr auto enum_cast(string_view value, [[maybe_unused]] BinaryPredicate p = {}) noexcept(detail::is_nothrow_invocable_v<BinaryPredicate>) -> detail::enable_if_t<E, optional<std::decay_t<E>>, BinaryPredicate> {
1419
3.08k
  using D = std::decay_t<E>;
1420
3.08k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1421
1422
#if defined(MAGIC_ENUM_ENABLE_HASH)
1423
  if constexpr (detail::is_default_predicate_v<BinaryPredicate>) {
1424
    return detail::constexpr_switch<&detail::names_v<D, S>, detail::case_call_t::index>(
1425
        [](std::size_t i) { return optional<D>{detail::values_v<D, S>[i]}; },
1426
        value,
1427
        detail::default_result_type_lambda<optional<D>>,
1428
        [&p](string_view lhs, string_view rhs) { return detail::cmp_equal(lhs, rhs, p); });
1429
  }
1430
#endif
1431
24.6k
  for (std::size_t i = 0; i < detail::count_v<D, S>; ++i) {
1432
21.5k
    if (detail::cmp_equal(value, detail::names_v<D, S>[i], p)) {
1433
13
      return enum_value<D, S>(i);
1434
13
    }
1435
21.5k
  }
1436
3.07k
  return {}; // Invalid value or out of range.
1437
3.08k
}
1438
1439
// Checks whether enum contains value with such value.
1440
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1441
[[nodiscard]] constexpr auto enum_contains(E value) noexcept -> detail::enable_if_t<E, bool> {
1442
  using D = std::decay_t<E>;
1443
  using U = underlying_type_t<D>;
1444
1445
  return static_cast<bool>(enum_cast<D, S>(static_cast<U>(value)));
1446
}
1447
1448
// Checks whether enum contains value with such value.
1449
template <detail::enum_subtype S, typename E>
1450
[[nodiscard]] constexpr auto enum_contains(E value) noexcept -> detail::enable_if_t<E, bool> {
1451
  using D = std::decay_t<E>;
1452
  using U = underlying_type_t<D>;
1453
1454
  return static_cast<bool>(enum_cast<D, S>(static_cast<U>(value)));
1455
}
1456
1457
// Checks whether enum contains value with such integer value.
1458
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1459
2.05k
[[nodiscard]] constexpr auto enum_contains(underlying_type_t<E> value) noexcept -> detail::enable_if_t<E, bool> {
1460
2.05k
  using D = std::decay_t<E>;
1461
1462
2.05k
  return static_cast<bool>(enum_cast<D, S>(value));
1463
2.05k
}
1464
1465
// Checks whether enum contains enumerator with such name.
1466
template <typename E, detail::enum_subtype S = detail::subtype_v<E>, typename BinaryPredicate = std::equal_to<>>
1467
[[nodiscard]] constexpr auto enum_contains(string_view value, BinaryPredicate p = {}) noexcept(detail::is_nothrow_invocable_v<BinaryPredicate>) -> detail::enable_if_t<E, bool, BinaryPredicate> {
1468
  using D = std::decay_t<E>;
1469
1470
  return static_cast<bool>(enum_cast<D, S>(value, std::move(p)));
1471
}
1472
1473
// Returns true if the enum integer value is in the range of values that can be reflected.
1474
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1475
[[nodiscard]] constexpr auto enum_reflected(underlying_type_t<E> value) noexcept -> detail::enable_if_t<E, bool> {
1476
  using D = std::decay_t<E>;
1477
1478
  if constexpr (detail::is_reflected_v<D, S>) {
1479
    constexpr auto min = detail::reflected_min<E, S>();
1480
    constexpr auto max = detail::reflected_max<E, S>();
1481
    return value >= min && value <= max;
1482
  } else {
1483
    return false;
1484
  }
1485
}
1486
1487
// Returns true if the enum value is in the range of values that can be reflected.
1488
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1489
[[nodiscard]] constexpr auto enum_reflected(E value) noexcept -> detail::enable_if_t<E, bool> {
1490
  using D = std::decay_t<E>;
1491
1492
  return enum_reflected<D, S>(static_cast<underlying_type_t<D>>(value));
1493
}
1494
1495
// Returns true if the enum value is in the range of values that can be reflected.
1496
template <detail::enum_subtype S, typename E>
1497
[[nodiscard]] constexpr auto enum_reflected(E value) noexcept -> detail::enable_if_t<E, bool> {
1498
  using D = std::decay_t<E>;
1499
1500
  return enum_reflected<D, S>(value);
1501
}
1502
1503
template <bool AsFlags = true>
1504
inline constexpr auto as_flags = AsFlags ? detail::enum_subtype::flags : detail::enum_subtype::common;
1505
1506
template <bool AsFlags = true>
1507
inline constexpr auto as_common = AsFlags ? detail::enum_subtype::common : detail::enum_subtype::flags;
1508
1509
namespace bitwise_operators {
1510
1511
template <typename E, detail::enable_if_t<E, int> = 0>
1512
constexpr E operator~(E rhs) noexcept {
1513
  return static_cast<E>(~static_cast<underlying_type_t<E>>(rhs));
1514
}
1515
1516
template <typename E, detail::enable_if_t<E, int> = 0>
1517
constexpr E operator|(E lhs, E rhs) noexcept {
1518
  return static_cast<E>(static_cast<underlying_type_t<E>>(lhs) | static_cast<underlying_type_t<E>>(rhs));
1519
}
1520
1521
template <typename E, detail::enable_if_t<E, int> = 0>
1522
constexpr E operator&(E lhs, E rhs) noexcept {
1523
  return static_cast<E>(static_cast<underlying_type_t<E>>(lhs) & static_cast<underlying_type_t<E>>(rhs));
1524
}
1525
1526
template <typename E, detail::enable_if_t<E, int> = 0>
1527
constexpr E operator^(E lhs, E rhs) noexcept {
1528
  return static_cast<E>(static_cast<underlying_type_t<E>>(lhs) ^ static_cast<underlying_type_t<E>>(rhs));
1529
}
1530
1531
template <typename E, detail::enable_if_t<E, int> = 0>
1532
constexpr E& operator|=(E& lhs, E rhs) noexcept {
1533
  return lhs = (lhs | rhs);
1534
}
1535
1536
template <typename E, detail::enable_if_t<E, int> = 0>
1537
constexpr E& operator&=(E& lhs, E rhs) noexcept {
1538
  return lhs = (lhs & rhs);
1539
}
1540
1541
template <typename E, detail::enable_if_t<E, int> = 0>
1542
constexpr E& operator^=(E& lhs, E rhs) noexcept {
1543
  return lhs = (lhs ^ rhs);
1544
}
1545
1546
} // namespace magic_enum::bitwise_operators
1547
1548
} // namespace magic_enum
1549
1550
#if defined(__clang__)
1551
#  pragma clang diagnostic pop
1552
#elif defined(__GNUC__)
1553
#  pragma GCC diagnostic pop
1554
#elif defined(_MSC_VER)
1555
#  pragma warning(pop)
1556
#endif
1557
1558
#undef MAGIC_ENUM_GET_ENUM_NAME_BUILTIN
1559
#undef MAGIC_ENUM_GET_TYPE_NAME_BUILTIN
1560
#undef MAGIC_ENUM_VS_2017_WORKAROUND
1561
#undef MAGIC_ENUM_ARRAY_CONSTEXPR
1562
#undef MAGIC_ENUM_FOR_EACH_256
1563
1564
#endif // NEARGYE_MAGIC_ENUM_HPP