//----------------------------------------------------------------------------- #include //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Usage: // auto some_type = ...; // type_name(); // template constexpr auto type_name() noexcept { std::string_view name = "Error: unsupported compiler", prefix, suffix; #ifdef __clang__ name = __PRETTY_FUNCTION__; prefix = "auto type_name() [T = "; suffix = "]"; #elif defined(__GNUC__) name = __PRETTY_FUNCTION__; prefix = "constexpr auto type_name() [with T = "; suffix = "]"; #elif defined(_MSC_VER) name = __FUNCSIG__; prefix = "auto __cdecl type_name<"; suffix = ">(void) noexcept"; #endif name.remove_prefix(prefix.size()); name.remove_suffix(suffix.size()); return name; }