X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fformat.hpp;h=67509c275bad365ee23c2bd86ec7ab6fe44df5aa;hb=31375c424ac115fc0373237207fed795849e26ba;hp=b49a793b9a83808e4ea2203dffe54e0b45f74982;hpb=05aa7e19ec97871aad18d7c9787c4c89611cd2cd;p=lttng-tools.git diff --git a/src/common/format.hpp b/src/common/format.hpp index b49a793b9..67509c275 100644 --- a/src/common/format.hpp +++ b/src/common/format.hpp @@ -9,6 +9,9 @@ #include +#include +#include + DIAGNOSTIC_PUSH DIAGNOSTIC_IGNORE_SUGGEST_ATTRIBUTE_FORMAT DIAGNOSTIC_IGNORE_DUPLICATED_BRANCHES @@ -16,4 +19,27 @@ DIAGNOSTIC_IGNORE_DUPLICATED_BRANCHES #include DIAGNOSTIC_POP +/* + * Due to a bug in g++ < 7.1, this specialization must be enclosed in the fmt namespace, + * see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480. + */ +namespace fmt { +template <> +struct formatter : formatter { + template + typename FormatContextType::iterator format(const std::type_info& type_info, + FormatContextType& ctx) + { + int status; + auto demangled_name = + abi::__cxa_demangle(type_info.name(), nullptr, nullptr, &status); + auto it = status == 0 ? formatter::format(demangled_name, ctx) : + formatter::format(type_info.name(), ctx); + + free(demangled_name); + return it; + } +}; +} /* namespace fmt */ + #endif /* LTTNG_FORMAT_H */