mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-22 10:30:05 +00:00
Call parse on empty specs at compile time
This commit is contained in:
parent
8e87d3a8be
commit
661b23edeb
@ -2627,7 +2627,9 @@ template <typename Char, typename... Args> class format_string_checker {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
FMT_CONSTEXPR void on_replacement_field(int, const Char*) {}
|
FMT_CONSTEXPR void on_replacement_field(int id, const Char* begin) {
|
||||||
|
on_format_specs(id, begin, begin); // Call parse() on empty specs.
|
||||||
|
}
|
||||||
|
|
||||||
FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*)
|
FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*)
|
||||||
-> const Char* {
|
-> const Char* {
|
||||||
|
@ -273,7 +273,7 @@ struct custom_context {
|
|||||||
bool called = false;
|
bool called = false;
|
||||||
|
|
||||||
template <typename T> struct formatter_type {
|
template <typename T> struct formatter_type {
|
||||||
auto parse(fmt::format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(fmt::format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ struct test_struct {};
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <typename Char> struct formatter<test_struct, Char> {
|
template <typename Char> struct formatter<test_struct, Char> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -573,7 +573,7 @@ struct disabled_formatter_convertible {
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<enabled_formatter> {
|
template <> struct formatter<enabled_formatter> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
auto format(enabled_formatter, format_context& ctx) const
|
auto format(enabled_formatter, format_context& ctx) const
|
||||||
@ -583,7 +583,7 @@ template <> struct formatter<enabled_formatter> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <> struct formatter<enabled_ptr_formatter*> {
|
template <> struct formatter<enabled_ptr_formatter*> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
auto format(enabled_ptr_formatter*, format_context& ctx) const
|
auto format(enabled_ptr_formatter*, format_context& ctx) const
|
||||||
@ -607,7 +607,7 @@ struct nonconst_formattable {};
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<const_formattable> {
|
template <> struct formatter<const_formattable> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,7 +619,7 @@ template <> struct formatter<const_formattable> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <> struct formatter<nonconst_formattable> {
|
template <> struct formatter<nonconst_formattable> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +641,7 @@ struct convertible_to_pointer_formattable {
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<convertible_to_pointer_formattable> {
|
template <> struct formatter<convertible_to_pointer_formattable> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -721,7 +721,7 @@ struct convertible_to_cstring {
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<convertible_to_int> {
|
template <> struct formatter<convertible_to_int> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
auto format(convertible_to_int, format_context& ctx) const
|
auto format(convertible_to_int, format_context& ctx) const
|
||||||
@ -842,7 +842,7 @@ struct its_a_trap {
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<its_a_trap> {
|
template <> struct formatter<its_a_trap> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2101,7 +2101,7 @@ struct check_back_appender {};
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<check_back_appender> {
|
template <> struct formatter<check_back_appender> {
|
||||||
auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user