# neargye/magic_enum

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/neargye-magic-enum).**

6,115 stars · 559 forks · C++ · MIT

## Links

- GitHub: https://github.com/Neargye/magic_enum
- awesome-repositories: https://awesome-repositories.com/repository/neargye-magic-enum.md

## Topics

`c-plus-plus` `c-plus-plus-17` `cplusplus` `cplusplus-17` `cpp` `cpp17` `enum` `enum-to-string` `header-only` `metaprogramming` `no-dependencies` `reflection` `serialization` `single-file` `string-to-enum`

## Description

Magic Enum is a C++ library that provides compile-time reflection for enumerations, enabling conversion between enum values and their string names, iteration over enum members, and validation of enum values without relying on macros or external code generation. It uses template metaprogramming and constexpr functions to extract enum information directly from the compiler's internal representation, making the entire reflection process static and free of runtime overhead.

The library distinguishes itself through its comprehensive set of compile-time enum utilities, including the ability to count enum elements, iterate over all values, and dispatch runtime enum values to compile-time code paths via switch-like constructs. It also supports bitwise-combined enum flags, allowing flag combinations to be decomposed into individual components and mapped to their string names, as well as enum fusion, which encodes two enum values into a single integer for multi-level switch dispatch.

Beyond its core reflection capabilities, Magic Enum offers string parsing that converts string representations back into enum values with support for case-insensitive matching, integer-to-enum conversion with validity checking, and membership validation to determine whether a given value, integer, or string belongs to an enum's set of valid members. The library is header-only and requires no additional build steps or configuration to use.

## Tags

### Programming Languages & Runtimes

- [Enum Reflection](https://awesome-repositories.com/f/programming-languages-runtimes/reflection-apis/enum-reflection.md) — Provides compile-time reflection for C++ enums, converting values to strings and iterating members without macros.
- [Enum-to-String Converters](https://awesome-repositories.com/f/programming-languages-runtimes/reflection-apis/enum-reflection/enum-to-string-converters.md) — Converts enum values to their string names at compile time without macros or runtime overhead. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Enum Parsers](https://awesome-repositories.com/f/programming-languages-runtimes/string-parsing/enum-parsers.md) — Parses string representations back into C++ enum values with case-insensitive and custom matching rules.
- [Enum Switch Dispatchers](https://awesome-repositories.com/f/programming-languages-runtimes/compile-time-type-dispatch/enum-switch-dispatchers.md) — Ships a compile-time switch dispatch mechanism for mapping enum values to constexpr code paths.
- [Template Specializations](https://awesome-repositories.com/f/programming-languages-runtimes/language-features-paradigms/generics-templates/variadic-template-arguments/template-specializations.md) — Generates unique template specializations per enum type for type-safe string conversion and iteration.
- [Compile-Time Enum Counters](https://awesome-repositories.com/f/programming-languages-runtimes/reflection-apis/enum-reflection/compile-time-enum-counters.md) — Counts distinct enum values at compile time without macros or runtime overhead. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Compile-Time Enum Iterators](https://awesome-repositories.com/f/programming-languages-runtimes/reflection-apis/enum-reflection/compile-time-enum-iterators.md) — Iterates over all enum values at compile time for code generation and static analysis. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Compile-Time Enum Switches](https://awesome-repositories.com/f/programming-languages-runtimes/reflection-apis/enum-reflection/compile-time-enum-switches.md) — Dispatches runtime enum values to compile-time code paths via constexpr lambdas. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Enum Index Retrievers](https://awesome-repositories.com/f/programming-languages-runtimes/reflection-apis/enum-reflection/enum-index-retrievers.md) — Returns the zero-based index of an enum value within its compile-time sequence. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Multi-Enum Dispatchers](https://awesome-repositories.com/f/programming-languages-runtimes/switch-statements/multi-enum-dispatchers.md) — Implements enum fusion to encode two enum values into a single integer for multi-level switch dispatch.

### Data & Databases

- [Compile-Time Conversions](https://awesome-repositories.com/f/data-databases/enum-definitions/symbol-to-enum-conversions/compile-time-conversions.md) — Converts any C++ enum value to its string name at compile time using template metaprogramming.
- [String-to-Enum Parsers](https://awesome-repositories.com/f/data-databases/enum-definitions/symbol-to-enum-conversions/string-to-enum-parsers.md) — Parses string representations back into enum values with case-insensitive matching support. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Integer-to-Enum Converters](https://awesome-repositories.com/f/data-databases/enum-definitions/symbol-to-enum-conversions/integer-to-enum-converters.md) — Converts integers to enum values with validity checking, returning optional results for invalid inputs. ([source](https://cdn.jsdelivr.net/gh/neargye/magic_enum@master/README.md))
- [Enum Membership Validators](https://awesome-repositories.com/f/data-databases/field-validation/enum-membership-validators.md) — Validates integer-to-enum conversions using constexpr lookup, returning optional values for invalid inputs.

### Software Engineering & Architecture

- [String Serializations](https://awesome-repositories.com/f/software-engineering-architecture/naming-conventions/named-constants/enum-definitions/string-serializations.md) — Provides compile-time conversion between enum values and their string names without macros.
- [Bitwise Flag Definitions](https://awesome-repositories.com/f/software-engineering-architecture/bitwise-encoding-utilities/bitwise-flag-definitions.md) — Supports bitwise-combined enum flags by decomposing integers into individual flag components and mapping them to names.
- [String Conversions](https://awesome-repositories.com/f/software-engineering-architecture/bitwise-encoding-utilities/bitwise-flag-definitions/string-conversions.md) — Handles bitwise-combined enum flags by converting flag combinations to string names and parsing them back.
- [Enum Value Sequences](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/abstraction-domain-modeling/compile-time-architectural-patterns/compile-time-metaprogramming/integer-sequence-generation/enum-value-sequences.md) — Generates compile-time sequences of enum values for iteration and counting without runtime overhead.
