diff --git a/include/fmt/core.h b/include/fmt/core.h index 0efe7fce3faf..1c70d2642edc 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -13,9 +13,41 @@ #include // strlen #include // std::byte -#include // std::string #include // std::enable_if +#if defined(_LIBCPP_VERSION) +# define FMT_BEGIN_NAMESPACE_STD _LIBCPP_BEGIN_NAMESPACE_STD +# define FMT_END_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD +# define FMT_STD_TEMPLATE_VIS _LIBCPP_TEMPLATE_VIS +# define FMT_BEGIN_NAMESPACE_CXX11 +# define FMT_END_NAMESPACE_CXX11 +#elif defined(_GLIBCXX_RELEASE) +# define FMT_BEGIN_NAMESPACE_STD \ + namespace std _GLIBCXX_VISIBILITY(default) { \ + _GLIBCXX_BEGIN_NAMESPACE_VERSION +# define FMT_END_NAMESPACE_STD _GLIBCXX_END_NAMESPACE_VERSION } +# define FMT_STD_TEMPLATE_VIS +# if defined(_GLIBCXX_USE_CXX11_ABI) +# define FMT_BEGIN_NAMESPACE_CXX11 inline _GLIBCXX_BEGIN_NAMESPACE_CXX11 +# define FMT_END_NAMESPACE_CXX11 _GLIBCXX_END_NAMESPACE_CXX11 +# endif +#else +# include +#endif + +#ifdef FMT_BEGIN_NAMESPACE_STD +FMT_BEGIN_NAMESPACE_STD +template +struct FMT_STD_TEMPLATE_VIS char_traits; +template +class FMT_STD_TEMPLATE_VIS allocator; +FMT_BEGIN_NAMESPACE_CXX11 +template +class FMT_STD_TEMPLATE_VIS basic_string; +FMT_END_NAMESPACE_CXX11 +FMT_END_NAMESPACE_STD +#endif // FMT_BEGIN_NAMESPACE_STD + // The fmt library version in the form major * 10000 + minor * 100 + patch. #define FMT_VERSION 100202 @@ -2807,9 +2839,9 @@ FMT_API auto vformat(string_view fmt, format_args args) -> basic_string; std::string message = fmt::format("The answer is {}.", 42); \endrst */ -template +template FMT_NODISCARD FMT_INLINE auto format(format_string fmt, T&&... args) - -> basic_string { + -> basic_string { return vformat(fmt, fmt::make_format_args(args...)); }