15 #ifndef GEOS_COMMON_FORMAT_HPP_
16 #define GEOS_COMMON_FORMAT_HPP_
18 #include <type_traits>
20 #if __cplusplus < 202002L
25 #define FMT_HEADER_ONLY
27 #include "../include/fmt/core.h"
28 #include "../include/fmt/chrono.h"
29 #include "../include/fmt/ranges.h"
30 #include "../include/fmt/xchar.h"
31 #define GEOS_FMT_NS fmt
34 #define GEOS_FMT_NS std
43 template<
typename T >
44 struct fmt::formatter< T, std::enable_if_t< std::is_enum< T >::value > >
52 template<
typename ParseContext >
53 constexpr
auto parse( ParseContext & ctx )
65 template<
typename FormatContext >
66 auto format(
const T & value, FormatContext & ctx )
68 return fmt::format_to( ctx.out(),
"{}",
static_cast< std::underlying_type_t< T >
>( value ) );
77 #define GEOS_FMT( msg, ... ) GEOS_FMT_NS::format( msg, __VA_ARGS__ )
86 #define GEOS_FMT_TO( iter, size, msg, ... ) *GEOS_FMT_NS::format_to_n( iter, size - 1, msg, __VA_ARGS__ ).out = '\0'
98 #ifdef GEOS_USE_FMT_CONST_FORMATTER_WORKAROUND
100 constexpr
auto GEOS_FMT_NS::detail::has_const_formatter_impl< GEOS_FMT_NS::format_context >( ... ) ->
bool