Coverage Report

Created: 2025-10-13 07:03

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.0k
#  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
188
189
namespace customize {
190
191
template<bool IsFlags = false,int Min = MAGIC_ENUM_RANGE_MIN,int Max = MAGIC_ENUM_RANGE_MAX,std::size_t PrefixLength = 0>
192
struct adl_info_holder {
193
    constexpr static int max = Max;
194
    constexpr static int min = Min;
195
    constexpr static bool is_flags =IsFlags;
196
    constexpr static std::size_t prefix_length = PrefixLength;
197
  
198
    template<int min,int max>
199
    constexpr static adl_info_holder<IsFlags,min,max,PrefixLength> minmax() { return {};}
200
    template<bool is_flag>
201
    constexpr static adl_info_holder<is_flag,Min,Max,PrefixLength> flag() { return {};}
202
    template<std::size_t prefix_len>
203
    constexpr static adl_info_holder<IsFlags,Min,Max,prefix_len> prefix() { return {};}
204
};
205
206
constexpr adl_info_holder<> adl_info()
207
0
{
208
0
     return {};
209
0
}
210
211
// 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.
212
// If need another range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MIN and MAGIC_ENUM_RANGE_MAX.
213
// If need another range for specific enum type, add specialization enum_range for necessary enum type.
214
template <typename E,typename /*= void*/>
215
struct enum_range {
216
    static constexpr int min = MAGIC_ENUM_RANGE_MIN;
217
    static constexpr int max = MAGIC_ENUM_RANGE_MAX;
218
};
219
220
template <typename E>
221
struct enum_range<E, decltype(void(magic_enum_define_range_adl(E{}))) >
222
: decltype(magic_enum_define_range_adl(E{})) {};
223
224
static_assert(MAGIC_ENUM_RANGE_MAX > MAGIC_ENUM_RANGE_MIN, "MAGIC_ENUM_RANGE_MAX must be greater than MAGIC_ENUM_RANGE_MIN.");
225
226
namespace detail {
227
228
enum class customize_tag {
229
  default_tag,
230
  invalid_tag,
231
  custom_tag
232
};
233
234
} // namespace magic_enum::customize::detail
235
236
class customize_t : public std::pair<detail::customize_tag, string_view> {
237
 public:
238
0
  constexpr customize_t(string_view srt) : std::pair<detail::customize_tag, string_view>{detail::customize_tag::custom_tag, srt} {}
239
0
  constexpr customize_t(const char_type* srt) : customize_t{string_view{srt}} {}
240
0
  constexpr customize_t(detail::customize_tag tag) : std::pair<detail::customize_tag, string_view>{tag, string_view{}} {
241
0
    MAGIC_ENUM_ASSERT(tag != detail::customize_tag::custom_tag);
242
0
  }
243
};
244
245
// Default customize.
246
inline constexpr auto default_tag = customize_t{detail::customize_tag::default_tag};
247
// Invalid customize.
248
inline constexpr auto invalid_tag = customize_t{detail::customize_tag::invalid_tag};
249
250
// If need custom names for enum, add specialization enum_name for necessary enum type.
251
template <typename E>
252
0
constexpr customize_t enum_name(E) noexcept {
253
0
  return default_tag;
254
0
}
255
256
// If need custom type name for enum, add specialization enum_type_name for necessary enum type.
257
template <typename E>
258
constexpr customize_t enum_type_name() noexcept {
259
  return default_tag;
260
}
261
262
} // namespace magic_enum::customize
263
264
namespace detail {
265
266
template <typename T>
267
struct supported
268
#if defined(MAGIC_ENUM_SUPPORTED) && MAGIC_ENUM_SUPPORTED || defined(MAGIC_ENUM_NO_CHECK_SUPPORT)
269
  : std::true_type {};
270
#else
271
  : std::false_type {};
272
#endif
273
274
template <auto V, typename E = std::decay_t<decltype(V)>, std::enable_if_t<std::is_enum_v<E>, int> = 0>
275
using enum_constant = std::integral_constant<E, V>;
276
277
template <typename... T>
278
inline constexpr bool always_false_v = false;
279
280
template <typename T, typename = void>
281
struct has_is_flags : std::false_type {};
282
283
template <typename T>
284
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)>>> {};
285
286
template <typename T, typename = void>
287
struct range_min : std::integral_constant<int, MAGIC_ENUM_RANGE_MIN> {};
288
289
template <typename T>
290
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> {};
291
292
template <typename T, typename = void>
293
struct range_max : std::integral_constant<int, MAGIC_ENUM_RANGE_MAX> {};
294
295
template <typename T>
296
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> {};
297
298
struct str_view {
299
  const char* str_ = nullptr;
300
  std::size_t size_ = 0;
301
};
302
303
template <std::uint16_t N>
304
class static_str {
305
 public:
306
  constexpr explicit static_str(str_view str) noexcept : static_str{str.str_, std::make_integer_sequence<std::uint16_t, N>{}} {
307
    MAGIC_ENUM_ASSERT(str.size_ == N);
308
  }
309
310
  constexpr explicit static_str(const char* const str) noexcept : static_str{ str, std::make_integer_sequence<std::uint16_t, N>{} } {
311
  }
312
313
  constexpr explicit static_str(string_view str) noexcept : static_str{str.data(), std::make_integer_sequence<std::uint16_t, N>{}} {
314
    MAGIC_ENUM_ASSERT(str.size() == N);
315
  }
316
317
0
  constexpr const char_type* data() const noexcept { return chars_; }
318
319
0
  constexpr std::uint16_t size() const noexcept { return N; }
320
321
0
  constexpr operator string_view() const noexcept { return {data(), size()}; }
322
323
 private:
324
  template <std::uint16_t... I>
325
  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')} {}
326
327
  template <std::uint16_t... I>
328
  constexpr static_str(string_view str, std::integer_sequence<std::uint16_t, I...>) noexcept : chars_{str[I]..., static_cast<char_type>('\0')} {}
329
330
  char_type chars_[static_cast<std::size_t>(N) + 1];
331
};
332
333
template <>
334
class static_str<0> {
335
 public:
336
  constexpr explicit static_str() = default;
337
338
0
  constexpr explicit static_str(str_view) noexcept {}
339
340
0
  constexpr explicit static_str(string_view) noexcept {}
341
342
0
  constexpr const char_type* data() const noexcept { return nullptr; }
343
344
0
  constexpr std::uint16_t size() const noexcept { return 0; }
345
346
0
  constexpr operator string_view() const noexcept { return {}; }
347
};
348
349
template <typename Op = std::equal_to<>>
350
class case_insensitive {
351
  static constexpr char_type to_lower(char_type c) noexcept {
352
    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;
353
  }
354
355
 public:
356
  template <typename L, typename R>
357
  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> {
358
    return Op{}(to_lower(lhs), to_lower(rhs));
359
  }
360
};
361
362
0
constexpr std::size_t find(string_view str, char_type c) noexcept {
363
0
#if defined(__clang__) && __clang_major__ < 9 && defined(__GLIBCXX__) || defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__)
364
0
// https://stackoverflow.com/questions/56484834/constexpr-stdstring-viewfind-last-of-doesnt-work-on-clang-8-with-libstdc
365
0
// https://developercommunity.visualstudio.com/content/problem/360432/vs20178-regression-c-failed-in-test.html
366
0
  constexpr bool workaround = true;
367
0
#else
368
0
  constexpr bool workaround = false;
369
0
#endif
370
0
371
0
  if constexpr (workaround) {
372
0
    for (std::size_t i = 0; i < str.size(); ++i) {
373
0
      if (str[i] == c) {
374
0
        return i;
375
0
      }
376
0
    }
377
0
378
0
    return string_view::npos;
379
0
  } else {
380
0
    return str.find(c);
381
0
  }
382
0
}
383
384
template <typename BinaryPredicate>
385
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<>>;
386
387
388
template <typename BinaryPredicate>
389
inline constexpr bool is_nothrow_invocable_v = is_default_predicate_v<BinaryPredicate> || std::is_nothrow_invocable_r_v<bool, BinaryPredicate, char_type, char_type>;
390
391
392
template <typename BinaryPredicate>
393
21.4k
constexpr bool cmp_equal(string_view lhs, string_view rhs, [[maybe_unused]] BinaryPredicate&& p) noexcept(is_nothrow_invocable_v<BinaryPredicate>) {
394
#if defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__)
395
  // https://developercommunity.visualstudio.com/content/problem/360432/vs20178-regression-c-failed-in-test.html
396
  // https://developercommunity.visualstudio.com/content/problem/232218/c-constexpr-string-view.html
397
  constexpr bool workaround = true;
398
#else
399
21.4k
  constexpr bool workaround = false;
400
21.4k
#endif
401
402
  if constexpr (!is_default_predicate_v<BinaryPredicate> || workaround) {
403
    if (lhs.size() != rhs.size()) {
404
      return false;
405
    }
406
407
    const auto size = lhs.size();
408
    for (std::size_t i = 0; i < size; ++i) {
409
      if (!p(lhs[i], rhs[i])) {
410
        return false;
411
      }
412
    }
413
414
    return true;
415
21.4k
  } else {
416
21.4k
    return lhs == rhs;
417
21.4k
  }
418
21.4k
}
419
420
template <typename L, typename R>
421
0
constexpr bool cmp_less(L lhs, R rhs) noexcept {
422
0
  static_assert(std::is_integral_v<L> && std::is_integral_v<R>, "magic_enum::detail::cmp_less requires integral type.");
423
0
424
0
  if constexpr (std::is_signed_v<L> == std::is_signed_v<R>) {
425
0
    // If same signedness (both signed or both unsigned).
426
0
    return lhs < rhs;
427
0
  } else if constexpr (std::is_same_v<L, bool>) { // bool special case
428
0
      return static_cast<R>(lhs) < rhs;
429
0
  } else if constexpr (std::is_same_v<R, bool>) { // bool special case
430
0
      return lhs < static_cast<L>(rhs);
431
0
  } else if constexpr (std::is_signed_v<R>) {
432
0
    // If 'right' is negative, then result is 'false', otherwise cast & compare.
433
0
    return rhs > 0 && lhs < static_cast<std::make_unsigned_t<R>>(rhs);
434
0
  } else {
435
0
    // If 'left' is negative, then result is 'true', otherwise cast & compare.
436
0
    return lhs < 0 || static_cast<std::make_unsigned_t<L>>(lhs) < rhs;
437
0
  }
438
0
}
439
440
template <typename I>
441
0
constexpr I log2(I value) noexcept {
442
0
  static_assert(std::is_integral_v<I>, "magic_enum::detail::log2 requires integral type.");
443
0
444
0
  if constexpr (std::is_same_v<I, bool>) { // bool special case
445
0
    return MAGIC_ENUM_ASSERT(false), value;
446
0
  } else {
447
0
    auto ret = I{0};
448
0
    for (; value > I{1}; value >>= I{1}, ++ret) {}
449
0
450
0
    return ret;
451
0
  }
452
0
}
453
454
#if defined(__cpp_lib_array_constexpr) && __cpp_lib_array_constexpr >= 201603L
455
#  define MAGIC_ENUM_ARRAY_CONSTEXPR 1
456
#else
457
template <typename T, std::size_t N, std::size_t... I>
458
constexpr std::array<std::remove_cv_t<T>, N> to_array(T (&a)[N], std::index_sequence<I...>) noexcept {
459
  return {{a[I]...}};
460
}
461
#endif
462
463
template <typename T>
464
inline constexpr bool is_enum_v = std::is_enum_v<T> && std::is_same_v<T, std::decay_t<T>>;
465
466
template <typename E>
467
constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept {
468
  static_assert(is_enum_v<E>, "magic_enum::detail::n requires enum type.");
469
470
  if constexpr (supported<E>::value) {
471
#if defined(MAGIC_ENUM_GET_TYPE_NAME_BUILTIN)
472
    constexpr auto name_ptr = MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(E);
473
    constexpr auto name = name_ptr ? str_view{name_ptr, std::char_traits<char>::length(name_ptr)} : str_view{};
474
#elif defined(__clang__)
475
    str_view name;
476
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
477
      static_assert(always_false_v<E>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
478
      return str_view{};
479
    } else {
480
      name.size_ = sizeof(__PRETTY_FUNCTION__) - 36;
481
      name.str_ = __PRETTY_FUNCTION__ + 34;
482
    }
483
#elif defined(__GNUC__)
484
    auto name = str_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1};
485
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
486
      static_assert(always_false_v<E>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
487
      return str_view{};
488
    } else if (name.str_[name.size_ - 1] == ']') {
489
      name.size_ -= 50;
490
      name.str_ += 49;
491
    } else {
492
      name.size_ -= 40;
493
      name.str_ += 37;
494
    }
495
#elif defined(_MSC_VER)
496
    // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284).
497
    str_view name;
498
    name.str_ = __FUNCSIG__;
499
    name.str_ += 40;
500
    name.size_ += sizeof(__FUNCSIG__) - 57;
501
#else
502
    auto name = str_view{};
503
#endif
504
    std::size_t p = 0;
505
    for (std::size_t i = name.size_; i > 0; --i) {
506
      if (name.str_[i] == ':') {
507
        p = i + 1;
508
        break;
509
      }
510
    }
511
    if (p > 0) {
512
      name.size_ -= p;
513
      name.str_ += p;
514
    }
515
    return name;
516
  } else {
517
    return str_view{}; // Unsupported compiler or Invalid customize.
518
  }
519
}
520
521
template <typename E>
522
constexpr auto type_name() noexcept {
523
  [[maybe_unused]] constexpr auto custom = customize::enum_type_name<E>();
524
  static_assert(std::is_same_v<std::decay_t<decltype(custom)>, customize::customize_t>, "magic_enum::customize requires customize_t type.");
525
  if constexpr (custom.first == customize::detail::customize_tag::custom_tag) {
526
    constexpr auto name = custom.second;
527
    static_assert(!name.empty(), "magic_enum::customize requires not empty string.");
528
    return static_str<name.size()>{name};
529
  } else if constexpr (custom.first == customize::detail::customize_tag::invalid_tag) {
530
    return static_str<0>{};
531
  } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) {
532
    constexpr auto name = n<E>();
533
    return static_str<name.size_>{name};
534
  } else {
535
    static_assert(always_false_v<E>, "magic_enum::customize invalid.");
536
  }
537
}
538
539
template <typename E>
540
inline constexpr auto type_name_v = type_name<E>();
541
542
template <auto V>
543
0
constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept {
544
0
  static_assert(is_enum_v<decltype(V)>, "magic_enum::detail::n requires enum type.");
545
0
546
0
  if constexpr (supported<decltype(V)>::value) {
547
0
#if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN)
548
0
    constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V);
549
0
    auto name = name_ptr ? str_view{name_ptr, std::char_traits<char>::length(name_ptr)} : str_view{};
550
0
#elif defined(__clang__)
551
0
    str_view name;
552
0
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
553
0
      static_assert(always_false_v<decltype(V)>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
554
0
      return str_view{};
555
0
    } else {
556
0
      name.size_ = sizeof(__PRETTY_FUNCTION__) - 36;
557
0
      name.str_ = __PRETTY_FUNCTION__ + 34;
558
0
    }
559
0
    if (name.size_ > 22 && name.str_[0] == '(' && name.str_[1] == 'a' && name.str_[10] == ' ' && name.str_[22] == ':') {
560
0
      name.size_ -= 23;
561
0
      name.str_ += 23;
562
0
    }
563
0
    if (name.str_[0] == '(' || name.str_[0] == '-' || (name.str_[0] >= '0' && name.str_[0] <= '9')) {
564
0
      name = str_view{};
565
0
    }
566
0
#elif defined(__GNUC__)
567
0
    auto name = str_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1};
568
0
    if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) {
569
0
      static_assert(always_false_v<decltype(V)>, "magic_enum::detail::n requires __PRETTY_FUNCTION__.");
570
0
      return str_view{};
571
0
    } else if (name.str_[name.size_ - 1] == ']') {
572
0
      name.size_ -= 55;
573
0
      name.str_ += 54;
574
0
    } else {
575
0
      name.size_ -= 40;
576
0
      name.str_ += 37;
577
0
    }
578
0
    if (name.str_[0] == '(') {
579
0
      name = str_view{};
580
0
    }
581
0
#elif defined(_MSC_VER)
582
0
    str_view name;
583
0
    if ((__FUNCSIG__[5] == '_' && __FUNCSIG__[35] != '(') || (__FUNCSIG__[5] == 'c' && __FUNCSIG__[41] != '(')) {
584
0
      // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284).
585
0
      name.str_ = __FUNCSIG__;
586
0
      name.str_ += 35;
587
0
      name.size_ = sizeof(__FUNCSIG__) - 52;
588
0
    }
589
0
#else
590
0
    auto name = str_view{};
591
0
#endif
592
0
    std::size_t p = 0;
593
0
    for (std::size_t i = name.size_; i > 0; --i) {
594
0
      if (name.str_[i] == ':') {
595
0
        p = i + 1;
596
0
        break;
597
0
      }
598
0
    }
599
0
    if (p > 0) {
600
0
      name.size_ -= p;
601
0
      name.str_ += p;
602
0
    }
603
0
    return name;
604
0
  } else {
605
0
    return str_view{}; // Unsupported compiler or Invalid customize.
606
0
  }
607
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
608
609
#if defined(_MSC_VER) && !defined(__clang__) && _MSC_VER < 1920
610
#  define MAGIC_ENUM_VS_2017_WORKAROUND 1
611
#endif
612
613
#if defined(MAGIC_ENUM_VS_2017_WORKAROUND)
614
template <typename E, E V>
615
constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept {
616
  static_assert(is_enum_v<E>, "magic_enum::detail::n requires enum type.");
617
618
#  if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN)
619
  constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V);
620
  auto name = name_ptr ? str_view{name_ptr, std::char_traits<char>::length(name_ptr)} : str_view{};
621
#  else
622
  // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284).
623
  str_view name;
624
  name.str_ = __FUNCSIG__;
625
  name.size_ = sizeof(__FUNCSIG__) - 17;
626
  std::size_t p = 0;
627
  for (std::size_t i = name.size_; i > 0; --i) {
628
    if (name.str_[i] == ',' || name.str_[i] == ':') {
629
      p = i + 1;
630
      break;
631
    }
632
  }
633
  if (p > 0) {
634
    name.size_ -= p;
635
    name.str_ += p;
636
  }
637
  if (name.str_[0] == '(' || name.str_[0] == '-' || (name.str_[0] >= '0' && name.str_[0] <= '9')) {
638
    name = str_view{};
639
  }
640
  return name;
641
#  endif
642
}
643
#endif
644
645
template <typename E, E V>
646
0
constexpr auto enum_name() noexcept {
647
0
  [[maybe_unused]] constexpr auto custom = customize::enum_name<E>(V);
648
0
  static_assert(std::is_same_v<std::decay_t<decltype(custom)>, customize::customize_t>, "magic_enum::customize requires customize_t type.");
649
0
  if constexpr (custom.first == customize::detail::customize_tag::custom_tag) {
650
0
    constexpr auto name = custom.second;
651
0
    static_assert(!name.empty(), "magic_enum::customize requires not empty string.");
652
0
    return static_str<name.size()>{name};
653
0
  } else if constexpr (custom.first == customize::detail::customize_tag::invalid_tag) {
654
0
    return static_str<0>{};
655
0
  } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) {
656
0
#if defined(MAGIC_ENUM_VS_2017_WORKAROUND)
657
0
    constexpr auto name = n<E, V>();
658
0
#else
659
0
    constexpr auto name = n<V>();
660
0
#endif
661
0
    return static_str<name.size_ - prefix_length_or_zero<E>>{name.str_ + prefix_length_or_zero<E>};
662
0
  } else {
663
0
    static_assert(always_false_v<E>, "magic_enum::customize invalid.");
664
0
  }
665
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
666
667
template <typename E, E V>
668
inline constexpr auto enum_name_v = enum_name<E, V>();
669
670
// CWG1766: Values outside the range of the values of an enumeration
671
// https://reviews.llvm.org/D130058, https://reviews.llvm.org/D131307
672
#if defined(__clang__) && __clang_major__ >= 16
673
template <typename E, auto V, typename = void>
674
inline constexpr bool is_enum_constexpr_static_cast_valid = false;
675
template <typename E, auto V>
676
inline constexpr bool is_enum_constexpr_static_cast_valid<E, V, std::void_t<std::integral_constant<E, static_cast<E>(V)>>> = true;
677
#else
678
template <typename, auto>
679
inline constexpr bool is_enum_constexpr_static_cast_valid = true;
680
#endif
681
682
template <typename E, auto V>
683
0
constexpr bool is_valid() noexcept {
684
0
  if constexpr (is_enum_constexpr_static_cast_valid<E, V>) {
685
0
    constexpr E v = static_cast<E>(V);
686
0
    [[maybe_unused]] constexpr auto custom = customize::enum_name<E>(v);
687
0
    static_assert(std::is_same_v<std::decay_t<decltype(custom)>, customize::customize_t>, "magic_enum::customize requires customize_t type.");
688
0
    if constexpr (custom.first == customize::detail::customize_tag::custom_tag) {
689
0
      constexpr auto name = custom.second;
690
0
      static_assert(!name.empty(), "magic_enum::customize requires not empty string.");
691
0
      return name.size() != 0;
692
0
    } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) {
693
0
#if defined(MAGIC_ENUM_VS_2017_WORKAROUND)
694
0
      return n<E, v>().size_ != 0;
695
0
#else
696
0
      return n<v>().size_ != 0;
697
0
#endif
698
0
    } else {
699
0
      return false;
700
0
    }
701
0
  } else {
702
0
    return false;
703
0
  }
704
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
705
706
enum class enum_subtype {
707
  common,
708
  flags
709
};
710
711
template <typename E, int O, enum_subtype S, typename U = std::underlying_type_t<E>>
712
0
constexpr U ualue(std::size_t i) noexcept {
713
0
  if constexpr (std::is_same_v<U, bool>) { // bool special case
714
0
    static_assert(O == 0, "magic_enum::detail::ualue requires valid offset.");
715
0
716
0
    return static_cast<U>(i);
717
0
  } else if constexpr (S == enum_subtype::flags) {
718
0
    return static_cast<U>(U{1} << static_cast<U>(static_cast<int>(i) + O));
719
0
  } else {
720
0
    return static_cast<U>(static_cast<int>(i) + O);
721
0
  }
722
0
}
723
724
template <typename E, int O, enum_subtype S, typename U = std::underlying_type_t<E>>
725
0
constexpr E value(std::size_t i) noexcept {
726
0
  return static_cast<E>(ualue<E, O, S>(i));
727
0
}
728
729
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
730
0
constexpr int reflected_min() noexcept {
731
0
  if constexpr (S == enum_subtype::flags) {
732
0
    return 0;
733
0
  } else {
734
0
    constexpr auto lhs = range_min<E>::value;
735
0
    constexpr auto rhs = (std::numeric_limits<U>::min)();
736
0
737
0
    if constexpr (cmp_less(rhs, lhs)) {
738
0
      return lhs;
739
0
    } else {
740
0
      return rhs;
741
0
    }
742
0
  }
743
0
}
744
745
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
746
0
constexpr int reflected_max() noexcept {
747
0
  if constexpr (S == enum_subtype::flags) {
748
0
    return std::numeric_limits<U>::digits - 1;
749
0
  } else {
750
0
    constexpr auto lhs = range_max<E>::value;
751
0
    constexpr auto rhs = (std::numeric_limits<U>::max)();
752
0
753
0
    if constexpr (cmp_less(lhs, rhs)) {
754
0
      return lhs;
755
0
    } else {
756
0
      return rhs;
757
0
    }
758
0
  }
759
0
}
760
761
#define MAGIC_ENUM_FOR_EACH_256(T)                                                                                                                                                                 \
762
  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) \
763
  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) \
764
  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) \
765
  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) \
766
  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) \
767
  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) \
768
  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) \
769
  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)
770
771
template <typename E, enum_subtype S, std::size_t Size, int Min, std::size_t I>
772
0
constexpr void valid_count(bool* valid, std::size_t& count) noexcept {
773
0
#define MAGIC_ENUM_V(O)                                     \
774
0
  if constexpr ((I + O) < Size) {                           \
775
0
    if constexpr (is_valid<E, ualue<E, Min, S>(I + O)>()) { \
776
0
      valid[I + O] = true;                                  \
777
0
      ++count;                                              \
778
0
    }                                                       \
779
0
  }
780
0
781
0
  MAGIC_ENUM_FOR_EACH_256(MAGIC_ENUM_V)
782
0
783
0
  if constexpr ((I + 256) < Size) {
784
0
    valid_count<E, S, Size, Min, I + 256>(valid, count);
785
0
  }
786
0
#undef MAGIC_ENUM_V
787
0
}
788
789
template <std::size_t N>
790
struct valid_count_t {
791
  std::size_t count = 0;
792
  bool valid[N] = {};
793
};
794
795
template <typename E, enum_subtype S, std::size_t Size, int Min>
796
0
constexpr auto valid_count() noexcept {
797
0
  valid_count_t<Size> vc;
798
0
  valid_count<E, S, Size, Min, 0>(vc.valid, vc.count);
799
0
  return vc;
800
0
}
801
802
template <typename E, enum_subtype S, std::size_t Size, int Min>
803
0
constexpr auto values() noexcept {
804
0
  constexpr auto vc = valid_count<E, S, Size, Min>();
805
0
806
0
  if constexpr (vc.count > 0) {
807
0
#if defined(MAGIC_ENUM_ARRAY_CONSTEXPR)
808
0
    std::array<E, vc.count> values = {};
809
0
#else
810
0
    E values[vc.count] = {};
811
0
#endif
812
0
    for (std::size_t i = 0, v = 0; v < vc.count; ++i) {
813
0
      if (vc.valid[i]) {
814
0
        values[v++] = value<E, Min, S>(i);
815
0
      }
816
0
    }
817
0
#if defined(MAGIC_ENUM_ARRAY_CONSTEXPR)
818
0
    return values;
819
0
#else
820
0
    return to_array(values, std::make_index_sequence<vc.count>{});
821
0
#endif
822
0
  } else {
823
0
    return std::array<E, 0>{};
824
0
  }
825
0
}
826
827
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
828
0
constexpr auto values() noexcept {
829
0
  constexpr auto min = reflected_min<E, S>();
830
0
  constexpr auto max = reflected_max<E, S>();
831
0
  constexpr auto range_size = max - min + 1;
832
0
  static_assert(range_size > 0, "magic_enum::enum_range requires valid size.");
833
0
834
0
  return values<E, S, range_size, min>();
835
0
}
836
837
template <typename E, typename U = std::underlying_type_t<E>>
838
0
constexpr enum_subtype subtype(std::true_type) noexcept {
839
0
  if constexpr (std::is_same_v<U, bool>) { // bool special case
840
0
    return enum_subtype::common;
841
0
  } else if constexpr (has_is_flags<E>::value) {
842
0
    return customize::enum_range<E>::is_flags ? enum_subtype::flags : enum_subtype::common;
843
0
  } else {
844
0
#if defined(MAGIC_ENUM_AUTO_IS_FLAGS)
845
0
    constexpr auto flags_values = values<E, enum_subtype::flags>();
846
0
    constexpr auto default_values = values<E, enum_subtype::common>();
847
0
    if (flags_values.size() == 0 || default_values.size() > flags_values.size()) {
848
0
      return enum_subtype::common;
849
0
    }
850
0
    for (std::size_t i = 0; i < default_values.size(); ++i) {
851
0
      const auto v = static_cast<U>(default_values[i]);
852
0
      if (v != 0 && (v & (v - 1)) != 0) {
853
0
        return enum_subtype::common;
854
0
      }
855
0
    }
856
0
    return enum_subtype::flags;
857
0
#else
858
0
    return enum_subtype::common;
859
0
#endif
860
0
  }
861
0
}
862
863
template <typename T>
864
constexpr enum_subtype subtype(std::false_type) noexcept {
865
  // For non-enum type return default common subtype.
866
  return enum_subtype::common;
867
}
868
869
template <typename E, typename D = std::decay_t<E>>
870
inline constexpr auto subtype_v = subtype<D>(std::is_enum<D>{});
871
872
template <typename E, enum_subtype S>
873
inline constexpr auto values_v = values<E, S>();
874
875
template <typename E, enum_subtype S, typename D = std::decay_t<E>>
876
using values_t = decltype((values_v<D, S>));
877
878
template <typename E, enum_subtype S>
879
inline constexpr auto count_v = values_v<E, S>.size();
880
881
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
882
inline constexpr auto min_v = (count_v<E, S> > 0) ? static_cast<U>(values_v<E, S>.front()) : U{0};
883
884
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
885
inline constexpr auto max_v = (count_v<E, S> > 0) ? static_cast<U>(values_v<E, S>.back()) : U{0};
886
887
template <typename E, enum_subtype S, std::size_t... I>
888
0
constexpr auto names(std::index_sequence<I...>) noexcept {
889
0
  constexpr auto names = std::array<string_view, sizeof...(I)>{{enum_name_v<E, values_v<E, S>[I]>...}};
890
0
  return names;
891
0
}
892
893
template <typename E, enum_subtype S>
894
inline constexpr auto names_v = names<E, S>(std::make_index_sequence<count_v<E, S>>{});
895
896
template <typename E, enum_subtype S, typename D = std::decay_t<E>>
897
using names_t = decltype((names_v<D, S>));
898
899
template <typename E, enum_subtype S, std::size_t... I>
900
0
constexpr auto entries(std::index_sequence<I...>) noexcept {
901
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]>}...}};
902
0
  return entries;
903
0
}
904
905
template <typename E, enum_subtype S>
906
inline constexpr auto entries_v = entries<E, S>(std::make_index_sequence<count_v<E, S>>{});
907
908
template <typename E, enum_subtype S, typename D = std::decay_t<E>>
909
using entries_t = decltype((entries_v<D, S>));
910
911
template <typename E, enum_subtype S, typename U = std::underlying_type_t<E>>
912
0
constexpr bool is_sparse() noexcept {
913
0
  if constexpr (count_v<E, S> == 0) {
914
0
    return false;
915
0
  } else if constexpr (std::is_same_v<U, bool>) { // bool special case
916
0
    return false;
917
0
  } else {
918
0
    constexpr auto max = (S == enum_subtype::flags) ? log2(max_v<E, S>) : max_v<E, S>;
919
0
    constexpr auto min = (S == enum_subtype::flags) ? log2(min_v<E, S>) : min_v<E, S>;
920
0
    constexpr auto range_size = max - min + 1;
921
0
922
0
    return range_size != count_v<E, S>;
923
0
  }
924
0
}
925
926
template <typename E, enum_subtype S = subtype_v<E>>
927
inline constexpr bool is_sparse_v = is_sparse<E, S>();
928
929
template <typename E, enum_subtype S>
930
struct is_reflected
931
#if defined(MAGIC_ENUM_NO_CHECK_REFLECTED_ENUM)
932
  : std::true_type {};
933
#else
934
  : std::bool_constant<std::is_enum_v<E> && (count_v<E, S> != 0)> {};
935
#endif
936
937
template <typename E, enum_subtype S>
938
inline constexpr bool is_reflected_v = is_reflected<std::decay_t<E>, S>{};
939
940
template <bool, typename R>
941
struct enable_if_enum {};
942
943
template <typename R>
944
struct enable_if_enum<true, R> {
945
  using type = R;
946
  static_assert(supported<R>::value, "magic_enum unsupported compiler (https://github.com/Neargye/magic_enum#compiler-compatibility).");
947
};
948
949
template <typename T, typename R, typename BinaryPredicate = std::equal_to<>, typename D = std::decay_t<T>>
950
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;
951
952
template <typename T, std::enable_if_t<std::is_enum_v<std::decay_t<T>>, int> = 0>
953
using enum_concept = T;
954
955
template <typename T, bool = std::is_enum_v<T>>
956
struct is_scoped_enum : std::false_type {};
957
958
template <typename T>
959
struct is_scoped_enum<T, true> : std::bool_constant<!std::is_convertible_v<T, std::underlying_type_t<T>>> {};
960
961
template <typename T, bool = std::is_enum_v<T>>
962
struct is_unscoped_enum : std::false_type {};
963
964
template <typename T>
965
struct is_unscoped_enum<T, true> : std::bool_constant<std::is_convertible_v<T, std::underlying_type_t<T>>> {};
966
967
template <typename T, bool = std::is_enum_v<std::decay_t<T>>>
968
struct underlying_type {};
969
970
template <typename T>
971
struct underlying_type<T, true> : std::underlying_type<std::decay_t<T>> {};
972
973
#if defined(MAGIC_ENUM_ENABLE_HASH) || defined(MAGIC_ENUM_ENABLE_HASH_SWITCH)
974
975
template <typename Value, typename = void>
976
struct constexpr_hash_t;
977
978
template <typename Value>
979
struct constexpr_hash_t<Value, std::enable_if_t<is_enum_v<Value>>> {
980
  constexpr auto operator()(Value value) const noexcept {
981
    using U = typename underlying_type<Value>::type;
982
    if constexpr (std::is_same_v<U, bool>) { // bool special case
983
      return static_cast<std::size_t>(value);
984
    } else {
985
      return static_cast<U>(value);
986
    }
987
  }
988
  using secondary_hash = constexpr_hash_t;
989
};
990
991
template <typename Value>
992
struct constexpr_hash_t<Value, std::enable_if_t<std::is_same_v<Value, string_view>>> {
993
  static constexpr std::uint32_t crc_table[256] {
994
    0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L,
995
    0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L,
996
    0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L,
997
    0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L,
998
    0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
999
    0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L,
1000
    0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL,
1001
    0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL,
1002
    0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L,
1003
    0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
1004
    0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L,
1005
    0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L,
1006
    0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL,
1007
    0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L,
1008
    0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
1009
    0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL,
1010
    0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L,
1011
    0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L,
1012
    0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L,
1013
    0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
1014
    0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL,
1015
    0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L,
1016
    0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL,
1017
    0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL,
1018
    0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
1019
    0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L,
1020
    0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L,
1021
    0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L,
1022
    0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL,
1023
    0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
1024
    0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL,
1025
    0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL
1026
  };
1027
  constexpr std::uint32_t operator()(string_view value) const noexcept {
1028
    auto crc = static_cast<std::uint32_t>(0xffffffffL);
1029
    for (const auto c : value) {
1030
      crc = (crc >> 8) ^ crc_table[(crc ^ static_cast<std::uint32_t>(c)) & 0xff];
1031
    }
1032
    return crc ^ 0xffffffffL;
1033
  }
1034
1035
  struct secondary_hash {
1036
    constexpr std::uint32_t operator()(string_view value) const noexcept {
1037
      auto acc = static_cast<std::uint64_t>(2166136261ULL);
1038
      for (const auto c : value) {
1039
        acc = ((acc ^ static_cast<std::uint64_t>(c)) * static_cast<std::uint64_t>(16777619ULL)) & (std::numeric_limits<std::uint32_t>::max)();
1040
      }
1041
      return static_cast<std::uint32_t>(acc);
1042
    }
1043
  };
1044
};
1045
1046
template <typename Hash>
1047
inline constexpr Hash hash_v{};
1048
1049
template <auto* GlobValues, typename Hash>
1050
constexpr auto calculate_cases(std::size_t Page) noexcept {
1051
  constexpr std::array values = *GlobValues;
1052
  constexpr std::size_t size = values.size();
1053
1054
  using switch_t = std::invoke_result_t<Hash, typename decltype(values)::value_type>;
1055
  static_assert(std::is_integral_v<switch_t> && !std::is_same_v<switch_t, bool>);
1056
  const std::size_t values_to = (std::min)(static_cast<std::size_t>(256), size - Page);
1057
1058
  std::array<switch_t, 256> result{};
1059
  auto fill = result.begin();
1060
  {
1061
    auto first = values.begin() + static_cast<std::ptrdiff_t>(Page);
1062
    auto last = values.begin() + static_cast<std::ptrdiff_t>(Page + values_to);
1063
    while (first != last) {
1064
      *fill++ = hash_v<Hash>(*first++);
1065
    }
1066
  }
1067
1068
  // dead cases, try to avoid case collisions
1069
  for (switch_t last_value = result[values_to - 1]; fill != result.end() && last_value != (std::numeric_limits<switch_t>::max)(); *fill++ = ++last_value) {
1070
  }
1071
1072
  {
1073
    auto it = result.begin();
1074
    auto last_value = (std::numeric_limits<switch_t>::min)();
1075
    for (; fill != result.end(); *fill++ = last_value++) {
1076
      while (last_value == *it) {
1077
        ++last_value, ++it;
1078
      }
1079
    }
1080
  }
1081
1082
  return result;
1083
}
1084
1085
template <typename R, typename F, typename... Args>
1086
constexpr R invoke_r(F&& f, Args&&... args) noexcept(std::is_nothrow_invocable_r_v<R, F, Args...>) {
1087
  if constexpr (std::is_void_v<R>) {
1088
    std::forward<F>(f)(std::forward<Args>(args)...);
1089
  } else {
1090
    return static_cast<R>(std::forward<F>(f)(std::forward<Args>(args)...));
1091
  }
1092
}
1093
1094
enum class case_call_t {
1095
  index,
1096
  value
1097
};
1098
1099
template <typename T = void>
1100
inline constexpr auto default_result_type_lambda = []() noexcept(std::is_nothrow_default_constructible_v<T>) { return T{}; };
1101
1102
template <>
1103
inline constexpr auto default_result_type_lambda<void> = []() noexcept {};
1104
1105
template <auto* Arr, typename Hash>
1106
constexpr bool has_duplicate() noexcept {
1107
  using value_t = std::decay_t<decltype((*Arr)[0])>;
1108
  using hash_value_t = std::invoke_result_t<Hash, value_t>;
1109
  std::array<hash_value_t, Arr->size()> hashes{};
1110
  std::size_t size = 0;
1111
  for (auto elem : *Arr) {
1112
    hashes[size] = hash_v<Hash>(elem);
1113
    for (auto i = size++; i > 0; --i) {
1114
      if (hashes[i] < hashes[i - 1]) {
1115
        auto tmp = hashes[i];
1116
        hashes[i] = hashes[i - 1];
1117
        hashes[i - 1] = tmp;
1118
      } else if (hashes[i] == hashes[i - 1]) {
1119
        return false;
1120
      } else {
1121
        break;
1122
      }
1123
    }
1124
  }
1125
  return true;
1126
}
1127
1128
#define MAGIC_ENUM_CASE(val)                                                                                                  \
1129
  case cases[val]:                                                                                                            \
1130
    if constexpr ((val) + Page < size) {                                                                                      \
1131
      if (!pred(values[val + Page], searched)) {                                                                              \
1132
        break;                                                                                                                \
1133
      }                                                                                                                       \
1134
      if constexpr (CallValue == case_call_t::index) {                                                                        \
1135
        if constexpr (std::is_invocable_r_v<result_t, Lambda, std::integral_constant<std::size_t, val + Page>>) {             \
1136
          return detail::invoke_r<result_t>(std::forward<Lambda>(lambda), std::integral_constant<std::size_t, val + Page>{}); \
1137
        } else if constexpr (std::is_invocable_v<Lambda, std::integral_constant<std::size_t, val + Page>>) {                  \
1138
          MAGIC_ENUM_ASSERT(false && "magic_enum::detail::constexpr_switch wrong result type.");                                         \
1139
        }                                                                                                                     \
1140
      } else if constexpr (CallValue == case_call_t::value) {                                                                 \
1141
        if constexpr (std::is_invocable_r_v<result_t, Lambda, enum_constant<values[val + Page]>>) {                           \
1142
          return detail::invoke_r<result_t>(std::forward<Lambda>(lambda), enum_constant<values[val + Page]>{});               \
1143
        } else if constexpr (std::is_invocable_r_v<result_t, Lambda, enum_constant<values[val + Page]>>) {                    \
1144
          MAGIC_ENUM_ASSERT(false && "magic_enum::detail::constexpr_switch wrong result type.");                                         \
1145
        }                                                                                                                     \
1146
      }                                                                                                                       \
1147
      break;                                                                                                                  \
1148
    } else [[fallthrough]];
1149
1150
template <auto* GlobValues,
1151
          case_call_t CallValue,
1152
          std::size_t Page = 0,
1153
          typename Hash = constexpr_hash_t<typename std::decay_t<decltype(*GlobValues)>::value_type>,
1154
          typename BinaryPredicate = std::equal_to<>,
1155
          typename Lambda,
1156
          typename ResultGetterType>
1157
constexpr decltype(auto) constexpr_switch(
1158
    Lambda&& lambda,
1159
    typename std::decay_t<decltype(*GlobValues)>::value_type searched,
1160
    ResultGetterType&& def,
1161
    BinaryPredicate&& pred = {}) {
1162
  using result_t = std::invoke_result_t<ResultGetterType>;
1163
  using hash_t = std::conditional_t<has_duplicate<GlobValues, Hash>(), Hash, typename Hash::secondary_hash>;
1164
  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.");
1165
  constexpr std::array values = *GlobValues;
1166
  constexpr std::size_t size = values.size();
1167
  constexpr std::array cases = calculate_cases<GlobValues, hash_t>(Page);
1168
1169
  switch (hash_v<hash_t>(searched)) {
1170
    MAGIC_ENUM_FOR_EACH_256(MAGIC_ENUM_CASE)
1171
    default:
1172
      if constexpr (size > 256 + Page) {
1173
        return constexpr_switch<GlobValues, CallValue, Page + 256, Hash>(std::forward<Lambda>(lambda), searched, std::forward<ResultGetterType>(def));
1174
      }
1175
      break;
1176
  }
1177
  return def();
1178
}
1179
1180
#undef MAGIC_ENUM_CASE
1181
1182
#endif
1183
1184
} // namespace magic_enum::detail
1185
1186
// Checks is magic_enum supported compiler.
1187
inline constexpr bool is_magic_enum_supported = detail::supported<void>::value;
1188
1189
template <typename T>
1190
using Enum = detail::enum_concept<T>;
1191
1192
// Checks whether T is an Unscoped enumeration type.
1193
// 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.
1194
template <typename T>
1195
struct is_unscoped_enum : detail::is_unscoped_enum<T> {};
1196
1197
template <typename T>
1198
inline constexpr bool is_unscoped_enum_v = is_unscoped_enum<T>::value;
1199
1200
// Checks whether T is an Scoped enumeration type.
1201
// 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.
1202
template <typename T>
1203
struct is_scoped_enum : detail::is_scoped_enum<T> {};
1204
1205
template <typename T>
1206
inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
1207
1208
// If T is a complete enumeration type, provides a member typedef type that names the underlying type of T.
1209
// 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.
1210
template <typename T>
1211
struct underlying_type : detail::underlying_type<T> {};
1212
1213
template <typename T>
1214
using underlying_type_t = typename underlying_type<T>::type;
1215
1216
template <auto V>
1217
using enum_constant = detail::enum_constant<V>;
1218
1219
// Returns type name of enum.
1220
template <typename E>
1221
[[nodiscard]] constexpr auto enum_type_name() noexcept -> detail::enable_if_t<E, string_view> {
1222
  constexpr string_view name = detail::type_name_v<std::decay_t<E>>;
1223
  static_assert(!name.empty(), "magic_enum::enum_type_name enum type does not have a name.");
1224
1225
  return name;
1226
}
1227
1228
// Returns number of enum values.
1229
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1230
2.05k
[[nodiscard]] constexpr auto enum_count() noexcept -> detail::enable_if_t<E, std::size_t> {
1231
2.05k
  return detail::count_v<std::decay_t<E>, S>;
1232
2.05k
}
1233
1234
// Returns enum value at specified index.
1235
// No bounds checking is performed: the behavior is undefined if index >= number of enum values.
1236
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1237
37.9k
[[nodiscard]] constexpr auto enum_value(std::size_t index) noexcept -> detail::enable_if_t<E, std::decay_t<E>> {
1238
37.9k
  using D = std::decay_t<E>;
1239
37.9k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1240
1241
37.9k
  if constexpr (detail::is_sparse_v<D, S>) {
1242
37.9k
    return MAGIC_ENUM_ASSERT(index < detail::count_v<D, S>), detail::values_v<D, S>[index];
1243
  } else {
1244
    constexpr auto min = (S == detail::enum_subtype::flags) ? detail::log2(detail::min_v<D, S>) : detail::min_v<D, S>;
1245
1246
    return MAGIC_ENUM_ASSERT(index < detail::count_v<D, S>), detail::value<D, min, S>(index);
1247
  }
1248
37.9k
}
1249
1250
// Returns enum value at specified index.
1251
template <typename E, std::size_t I, detail::enum_subtype S = detail::subtype_v<E>>
1252
[[nodiscard]] constexpr auto enum_value() noexcept -> detail::enable_if_t<E, std::decay_t<E>> {
1253
  using D = std::decay_t<E>;
1254
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1255
  static_assert(I < detail::count_v<D, S>, "magic_enum::enum_value out of range.");
1256
1257
  return enum_value<D, S>(I);
1258
}
1259
1260
// Returns std::array with enum values, sorted by enum value.
1261
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1262
0
[[nodiscard]] constexpr auto enum_values() noexcept -> detail::enable_if_t<E, detail::values_t<E, S>> {
1263
0
  using D = std::decay_t<E>;
1264
0
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1265
0
1266
0
  return detail::values_v<D, S>;
1267
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
1268
1269
// Returns integer value from enum value.
1270
template <typename E>
1271
[[nodiscard]] constexpr auto enum_integer(E value) noexcept -> detail::enable_if_t<E, underlying_type_t<E>> {
1272
  return static_cast<underlying_type_t<E>>(value);
1273
}
1274
1275
// Returns underlying value from enum value.
1276
template <typename E>
1277
[[nodiscard]] constexpr auto enum_underlying(E value) noexcept -> detail::enable_if_t<E, underlying_type_t<E>> {
1278
  return static_cast<underlying_type_t<E>>(value);
1279
}
1280
1281
// Obtains index in enum values from enum value.
1282
// Returns optional with index.
1283
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1284
8.20k
[[nodiscard]] constexpr auto enum_index(E value) noexcept -> detail::enable_if_t<E, optional<std::size_t>> {
1285
8.20k
  using D = std::decay_t<E>;
1286
8.20k
  using U = underlying_type_t<D>;
1287
8.20k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1288
1289
8.20k
  if constexpr (detail::is_sparse_v<D, S> || (S == detail::enum_subtype::flags)) {
1290
#if defined(MAGIC_ENUM_ENABLE_HASH)
1291
    return detail::constexpr_switch<&detail::values_v<D, S>, detail::case_call_t::index>(
1292
        [](std::size_t i) { return optional<std::size_t>{i}; },
1293
        value,
1294
        detail::default_result_type_lambda<optional<std::size_t>>);
1295
#else
1296
16.4k
    for (std::size_t i = 0; i < detail::count_v<D, S>; ++i) {
1297
16.4k
      if (enum_value<D, S>(i) == value) {
1298
8.20k
        return i;
1299
8.20k
      }
1300
16.4k
    }
1301
0
    return {}; // Invalid value or out of range.
1302
8.20k
#endif
1303
  } else {
1304
    const auto v = static_cast<U>(value);
1305
    if (v >= detail::min_v<D, S> && v <= detail::max_v<D, S>) {
1306
      return static_cast<std::size_t>(v - detail::min_v<D, S>);
1307
    }
1308
    return {}; // Invalid value or out of range.
1309
  }
1310
8.20k
}
1311
1312
// Obtains index in enum values from enum value.
1313
// Returns optional with index.
1314
template <detail::enum_subtype S, typename E>
1315
[[nodiscard]] constexpr auto enum_index(E value) noexcept -> detail::enable_if_t<E, optional<std::size_t>> {
1316
  using D = std::decay_t<E>;
1317
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1318
1319
  return enum_index<D, S>(value);
1320
}
1321
1322
// Obtains index in enum values from static storage enum variable.
1323
template <auto V, detail::enum_subtype S = detail::subtype_v<std::decay_t<decltype(V)>>>
1324
[[nodiscard]] constexpr auto enum_index() noexcept -> detail::enable_if_t<decltype(V), std::size_t> {\
1325
  using D = std::decay_t<decltype(V)>;
1326
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1327
  constexpr auto index = enum_index<D, S>(V);
1328
  static_assert(index, "magic_enum::enum_index enum value does not have a index.");
1329
1330
  return *index;
1331
}
1332
1333
// Returns name from static storage enum variable.
1334
// This version is much lighter on the compile times and is not restricted to the enum_range limitation.
1335
template <auto V>
1336
[[nodiscard]] constexpr auto enum_name() noexcept -> detail::enable_if_t<decltype(V), string_view> {
1337
  constexpr string_view name = detail::enum_name_v<std::decay_t<decltype(V)>, V>;
1338
  static_assert(!name.empty(), "magic_enum::enum_name enum value does not have a name.");
1339
1340
  return name;
1341
}
1342
1343
// Returns name from enum value.
1344
// If enum value does not have name or value out of range, returns empty string.
1345
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1346
[[nodiscard]] constexpr auto enum_name(E value) noexcept -> detail::enable_if_t<E, string_view> {
1347
  using D = std::decay_t<E>;
1348
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1349
1350
  if (const auto i = enum_index<D, S>(value)) {
1351
    return detail::names_v<D, S>[*i];
1352
  }
1353
  return {};
1354
}
1355
1356
// Returns name from enum value.
1357
// If enum value does not have name or value out of range, returns empty string.
1358
template <detail::enum_subtype S, typename E>
1359
[[nodiscard]] constexpr auto enum_name(E value) -> detail::enable_if_t<E, string_view> {
1360
  using D = std::decay_t<E>;
1361
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1362
1363
  return enum_name<D, S>(value);
1364
}
1365
1366
// Returns std::array with names, sorted by enum value.
1367
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1368
1.02k
[[nodiscard]] constexpr auto enum_names() noexcept -> detail::enable_if_t<E, detail::names_t<E, S>> {
1369
1.02k
  using D = std::decay_t<E>;
1370
1.02k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1371
1372
1.02k
  return detail::names_v<D, S>;
1373
1.02k
}
1374
1375
// Returns std::array with pairs (value, name), sorted by enum value.
1376
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1377
1.02k
[[nodiscard]] constexpr auto enum_entries() noexcept -> detail::enable_if_t<E, detail::entries_t<E, S>> {
1378
1.02k
  using D = std::decay_t<E>;
1379
1.02k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1380
1381
1.02k
  return detail::entries_v<D, S>;
1382
1.02k
}
1383
1384
// Allows you to write magic_enum::enum_cast<foo>("bar", magic_enum::case_insensitive);
1385
inline constexpr auto case_insensitive = detail::case_insensitive<>{};
1386
1387
// Obtains enum value from integer value.
1388
// Returns optional with enum value.
1389
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1390
3.07k
[[nodiscard]] constexpr auto enum_cast(underlying_type_t<E> value) noexcept -> detail::enable_if_t<E, optional<std::decay_t<E>>> {
1391
3.07k
  using D = std::decay_t<E>;
1392
3.07k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1393
1394
3.07k
  if constexpr (detail::is_sparse_v<D, S> || (S == detail::enum_subtype::flags)) {
1395
#if defined(MAGIC_ENUM_ENABLE_HASH)
1396
    return detail::constexpr_switch<&detail::values_v<D, S>, detail::case_call_t::value>(
1397
        [](D v) { return optional<D>{v}; },
1398
        static_cast<D>(value),
1399
        detail::default_result_type_lambda<optional<D>>);
1400
#else
1401
24.6k
    for (std::size_t i = 0; i < detail::count_v<D, S>; ++i) {
1402
21.5k
      if (value == static_cast<underlying_type_t<D>>(enum_value<D, S>(i))) {
1403
0
        return static_cast<D>(value);
1404
0
      }
1405
21.5k
    }
1406
3.07k
    return {}; // Invalid value or out of range.
1407
3.07k
#endif
1408
  } else {
1409
    if (value >= detail::min_v<D, S> && value <= detail::max_v<D, S>) {
1410
      return static_cast<D>(value);
1411
    }
1412
    return {}; // Invalid value or out of range.
1413
  }
1414
3.07k
}
1415
1416
// Obtains enum value from name.
1417
// Returns optional with enum value.
1418
template <typename E, detail::enum_subtype S = detail::subtype_v<E>, typename BinaryPredicate = std::equal_to<>>
1419
3.07k
[[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> {
1420
3.07k
  using D = std::decay_t<E>;
1421
3.07k
  static_assert(detail::is_reflected_v<D, S>, "magic_enum requires enum implementation and valid max and min.");
1422
1423
#if defined(MAGIC_ENUM_ENABLE_HASH)
1424
  if constexpr (detail::is_default_predicate_v<BinaryPredicate>) {
1425
    return detail::constexpr_switch<&detail::names_v<D, S>, detail::case_call_t::index>(
1426
        [](std::size_t i) { return optional<D>{detail::values_v<D, S>[i]}; },
1427
        value,
1428
        detail::default_result_type_lambda<optional<D>>,
1429
        [&p](string_view lhs, string_view rhs) { return detail::cmp_equal(lhs, rhs, p); });
1430
  }
1431
#endif
1432
24.5k
  for (std::size_t i = 0; i < detail::count_v<D, S>; ++i) {
1433
21.4k
    if (detail::cmp_equal(value, detail::names_v<D, S>[i], p)) {
1434
14
      return enum_value<D, S>(i);
1435
14
    }
1436
21.4k
  }
1437
3.06k
  return {}; // Invalid value or out of range.
1438
3.07k
}
1439
1440
// Checks whether enum contains value with such value.
1441
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1442
[[nodiscard]] constexpr auto enum_contains(E value) noexcept -> detail::enable_if_t<E, bool> {
1443
  using D = std::decay_t<E>;
1444
  using U = underlying_type_t<D>;
1445
1446
  return static_cast<bool>(enum_cast<D, S>(static_cast<U>(value)));
1447
}
1448
1449
// Checks whether enum contains value with such value.
1450
template <detail::enum_subtype S, typename E>
1451
[[nodiscard]] constexpr auto enum_contains(E value) noexcept -> detail::enable_if_t<E, bool> {
1452
  using D = std::decay_t<E>;
1453
  using U = underlying_type_t<D>;
1454
1455
  return static_cast<bool>(enum_cast<D, S>(static_cast<U>(value)));
1456
}
1457
1458
// Checks whether enum contains value with such integer value.
1459
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1460
2.05k
[[nodiscard]] constexpr auto enum_contains(underlying_type_t<E> value) noexcept -> detail::enable_if_t<E, bool> {
1461
2.05k
  using D = std::decay_t<E>;
1462
1463
2.05k
  return static_cast<bool>(enum_cast<D, S>(value));
1464
2.05k
}
1465
1466
// Checks whether enum contains enumerator with such name.
1467
template <typename E, detail::enum_subtype S = detail::subtype_v<E>, typename BinaryPredicate = std::equal_to<>>
1468
[[nodiscard]] constexpr auto enum_contains(string_view value, BinaryPredicate p = {}) noexcept(detail::is_nothrow_invocable_v<BinaryPredicate>) -> detail::enable_if_t<E, bool, BinaryPredicate> {
1469
  using D = std::decay_t<E>;
1470
1471
  return static_cast<bool>(enum_cast<D, S>(value, std::move(p)));
1472
}
1473
1474
// Returns true if the enum integer value is in the range of values that can be reflected.
1475
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1476
[[nodiscard]] constexpr auto enum_reflected(underlying_type_t<E> value) noexcept -> detail::enable_if_t<E, bool> {
1477
  using D = std::decay_t<E>;
1478
1479
  if constexpr (detail::is_reflected_v<D, S>) {
1480
    constexpr auto min = detail::reflected_min<E, S>();
1481
    constexpr auto max = detail::reflected_max<E, S>();
1482
    return value >= min && value <= max;
1483
  } else {
1484
    return false;
1485
  }
1486
}
1487
1488
// Returns true if the enum value is in the range of values that can be reflected.
1489
template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1490
[[nodiscard]] constexpr auto enum_reflected(E value) noexcept -> detail::enable_if_t<E, bool> {
1491
  using D = std::decay_t<E>;
1492
1493
  return enum_reflected<D, S>(static_cast<underlying_type_t<D>>(value));
1494
}
1495
1496
// Returns true if the enum value is in the range of values that can be reflected.
1497
template <detail::enum_subtype S, typename E>
1498
[[nodiscard]] constexpr auto enum_reflected(E value) noexcept -> detail::enable_if_t<E, bool> {
1499
  using D = std::decay_t<E>;
1500
1501
  return enum_reflected<D, S>(value);
1502
}
1503
1504
template <bool AsFlags = true>
1505
inline constexpr auto as_flags = AsFlags ? detail::enum_subtype::flags : detail::enum_subtype::common;
1506
1507
template <bool AsFlags = true>
1508
inline constexpr auto as_common = AsFlags ? detail::enum_subtype::common : detail::enum_subtype::flags;
1509
1510
namespace bitwise_operators {
1511
1512
template <typename E, detail::enable_if_t<E, int> = 0>
1513
constexpr E operator~(E rhs) noexcept {
1514
  return static_cast<E>(~static_cast<underlying_type_t<E>>(rhs));
1515
}
1516
1517
template <typename E, detail::enable_if_t<E, int> = 0>
1518
constexpr E operator|(E lhs, E rhs) noexcept {
1519
  return static_cast<E>(static_cast<underlying_type_t<E>>(lhs) | static_cast<underlying_type_t<E>>(rhs));
1520
}
1521
1522
template <typename E, detail::enable_if_t<E, int> = 0>
1523
constexpr E operator&(E lhs, E rhs) noexcept {
1524
  return static_cast<E>(static_cast<underlying_type_t<E>>(lhs) & static_cast<underlying_type_t<E>>(rhs));
1525
}
1526
1527
template <typename E, detail::enable_if_t<E, int> = 0>
1528
constexpr E operator^(E lhs, E rhs) noexcept {
1529
  return static_cast<E>(static_cast<underlying_type_t<E>>(lhs) ^ static_cast<underlying_type_t<E>>(rhs));
1530
}
1531
1532
template <typename E, detail::enable_if_t<E, int> = 0>
1533
constexpr E& operator|=(E& lhs, E rhs) noexcept {
1534
  return lhs = (lhs | rhs);
1535
}
1536
1537
template <typename E, detail::enable_if_t<E, int> = 0>
1538
constexpr E& operator&=(E& lhs, E rhs) noexcept {
1539
  return lhs = (lhs & rhs);
1540
}
1541
1542
template <typename E, detail::enable_if_t<E, int> = 0>
1543
constexpr E& operator^=(E& lhs, E rhs) noexcept {
1544
  return lhs = (lhs ^ rhs);
1545
}
1546
1547
} // namespace magic_enum::bitwise_operators
1548
1549
} // namespace magic_enum
1550
1551
#if defined(__clang__)
1552
#  pragma clang diagnostic pop
1553
#elif defined(__GNUC__)
1554
#  pragma GCC diagnostic pop
1555
#elif defined(_MSC_VER)
1556
#  pragma warning(pop)
1557
#endif
1558
1559
#undef MAGIC_ENUM_GET_ENUM_NAME_BUILTIN
1560
#undef MAGIC_ENUM_GET_TYPE_NAME_BUILTIN
1561
#undef MAGIC_ENUM_VS_2017_WORKAROUND
1562
#undef MAGIC_ENUM_ARRAY_CONSTEXPR
1563
#undef MAGIC_ENUM_FOR_EACH_256
1564
1565
#endif // NEARGYE_MAGIC_ENUM_HPP