mirror of
https://github.com/Neargye/magic_enum.git
synced 2026-01-10 23:44:29 +00:00
Support gcc -fno-pretty-templates (#258)
https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-fno-pretty-templates The gcc option -fno-pretty-templates changes the __PRETTY_FUNCTION__ from e.g. "auto n() [with E = E]" to "auto n<E>()" (more like MSVC). Pass the entire __PRETTY_FUNCTION__ / __FUNCSIG__ to pretty_name(), and truncate it there, checking the last character if necessary to determine the format used.
This commit is contained in:
parent
d4fa0c3dd3
commit
5367f5183c
2 changed files with 11 additions and 2 deletions
|
|
@ -425,8 +425,12 @@ constexpr auto n() noexcept {
|
||||||
#if defined(MAGIC_ENUM_GET_TYPE_NAME_BUILTIN)
|
#if defined(MAGIC_ENUM_GET_TYPE_NAME_BUILTIN)
|
||||||
constexpr auto name_ptr = MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(E);
|
constexpr auto name_ptr = MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(E);
|
||||||
constexpr auto name = name_ptr ? string_view{ name_ptr } : std::string_view{};
|
constexpr auto name = name_ptr ? string_view{ name_ptr } : std::string_view{};
|
||||||
#elif defined(__clang__) || defined(__GNUC__)
|
#elif defined(__clang__)
|
||||||
constexpr auto name = pretty_name({__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 2});
|
constexpr auto name = pretty_name({__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 2});
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
auto name = string_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1};
|
||||||
|
name.remove_suffix(name[name.size() - 1] == ']' ? 1 : 3);
|
||||||
|
name = pretty_name(name);
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
constexpr auto name = pretty_name({__FUNCSIG__, sizeof(__FUNCSIG__) - 17});
|
constexpr auto name = pretty_name({__FUNCSIG__, sizeof(__FUNCSIG__) - 17});
|
||||||
#else
|
#else
|
||||||
|
|
@ -469,8 +473,12 @@ constexpr auto n() noexcept {
|
||||||
#if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN)
|
#if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN)
|
||||||
constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V);
|
constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V);
|
||||||
constexpr auto name = name_ptr ? string_view{ name_ptr } : std::string_view{};
|
constexpr auto name = name_ptr ? string_view{ name_ptr } : std::string_view{};
|
||||||
#elif defined(__clang__) || defined(__GNUC__)
|
#elif defined(__clang__)
|
||||||
constexpr auto name = pretty_name({__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 2});
|
constexpr auto name = pretty_name({__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 2});
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
auto name = string_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1};
|
||||||
|
name.remove_suffix(name[name.size() - 1] == ']' ? 1 : 3);
|
||||||
|
name = pretty_name(name);
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
constexpr auto name = pretty_name({__FUNCSIG__, sizeof(__FUNCSIG__) - 17});
|
constexpr auto name = pretty_name({__FUNCSIG__, sizeof(__FUNCSIG__) - 17});
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ struct MyStringView {
|
||||||
constexpr std::size_t find(char c) const { return str.find(c); } // required
|
constexpr std::size_t find(char c) const { return str.find(c); } // required
|
||||||
constexpr MyStringView substr(std::size_t p, std::size_t n) { return str.substr(p, n); } // required
|
constexpr MyStringView substr(std::size_t p, std::size_t n) { return str.substr(p, n); } // required
|
||||||
constexpr void remove_prefix(std::size_t n) { str.remove_prefix(n); } // required
|
constexpr void remove_prefix(std::size_t n) { str.remove_prefix(n); } // required
|
||||||
|
constexpr void remove_suffix(std::size_t n) { str.remove_suffix(n); } // required
|
||||||
friend constexpr bool operator==(MyStringView lhs, MyStringView rhs); // required
|
friend constexpr bool operator==(MyStringView lhs, MyStringView rhs); // required
|
||||||
|
|
||||||
constexpr MyStringView(const char* cstr) : str{ cstr } {}
|
constexpr MyStringView(const char* cstr) : str{ cstr } {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue