Compile time error in case of trying to use FMT_COMPILE while it's not supported is prettified
This commit is contained in:
parent
d88d078abe
commit
0484cd75ad
@ -31,6 +31,22 @@ class compiled_string {};
|
|||||||
template <typename S>
|
template <typename S>
|
||||||
struct is_compiled_string : std::is_base_of<compiled_string, S> {};
|
struct is_compiled_string : std::is_base_of<compiled_string, S> {};
|
||||||
|
|
||||||
|
#ifdef __cpp_if_constexpr
|
||||||
|
# define FMT_COMPILE_IMPL(s) FMT_STRING_IMPL(s, fmt::detail::compiled_string)
|
||||||
|
#else
|
||||||
|
namespace fmt_compile_error {
|
||||||
|
template<class T> struct false_type : std::false_type {};
|
||||||
|
|
||||||
|
template<class T> FMT_CONSTEXPR const char* report_compile_error() {
|
||||||
|
static_assert(
|
||||||
|
false_type<T>::value, "FMT_COMPILE requires C++17 `constexpr if` compiler support"
|
||||||
|
);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# define FMT_COMPILE_IMPL(s) ::fmt::detail::fmt_compile_error::report_compile_error<void*>()
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\rst
|
\rst
|
||||||
Converts a string literal *s* into a format string that will be parsed at
|
Converts a string literal *s* into a format string that will be parsed at
|
||||||
@ -44,7 +60,7 @@ struct is_compiled_string : std::is_base_of<compiled_string, S> {};
|
|||||||
std::string s = fmt::format(FMT_COMPILE("{}"), 42);
|
std::string s = fmt::format(FMT_COMPILE("{}"), 42);
|
||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
#define FMT_COMPILE(s) FMT_STRING_IMPL(s, fmt::detail::compiled_string)
|
#define FMT_COMPILE(s) FMT_COMPILE_IMPL(s)
|
||||||
|
|
||||||
#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS
|
#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS
|
||||||
template <typename Char, size_t N> struct fixed_string {
|
template <typename Char, size_t N> struct fixed_string {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user