mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-25 06:21:00 +00:00
Fix ambiguous overloads of format & format_to
This commit is contained in:
parent
153f753bde
commit
8a06ca84c7
@ -351,6 +351,8 @@ template <int N, typename... Args> struct get_type_impl<N, type_list<Args...>> {
|
|||||||
template <int N, typename T>
|
template <int N, typename T>
|
||||||
using get_type = typename get_type_impl<N, T>::type;
|
using get_type = typename get_type_impl<N, T>::type;
|
||||||
|
|
||||||
|
template <typename T> struct is_static_compiled_format : std::false_type {};
|
||||||
|
|
||||||
template <typename Char> struct text {
|
template <typename Char> struct text {
|
||||||
basic_string_view<Char> data;
|
basic_string_view<Char> data;
|
||||||
using char_type = Char;
|
using char_type = Char;
|
||||||
@ -362,6 +364,9 @@ template <typename Char> struct text {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename Char>
|
||||||
|
struct is_static_compiled_format<text<Char>> : std::true_type {};
|
||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
constexpr text<Char> make_text(basic_string_view<Char> s, size_t pos,
|
constexpr text<Char> make_text(basic_string_view<Char> s, size_t pos,
|
||||||
size_t size) {
|
size_t size) {
|
||||||
@ -407,6 +412,9 @@ template <typename Char, typename T, int N> struct field {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename Char, typename T, int N>
|
||||||
|
struct is_static_compiled_format<field<Char, T, N>> : std::true_type {};
|
||||||
|
|
||||||
template <typename L, typename R> struct concat {
|
template <typename L, typename R> struct concat {
|
||||||
L lhs;
|
L lhs;
|
||||||
R rhs;
|
R rhs;
|
||||||
@ -419,6 +427,9 @@ template <typename L, typename R> struct concat {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename L, typename R>
|
||||||
|
struct is_static_compiled_format<concat<L, R>> : std::true_type {};
|
||||||
|
|
||||||
template <typename L, typename R>
|
template <typename L, typename R>
|
||||||
constexpr concat<L, R> make_concat(L lhs, R rhs) {
|
constexpr concat<L, R> make_concat(L lhs, R rhs) {
|
||||||
return {lhs, rhs};
|
return {lhs, rhs};
|
||||||
@ -507,19 +518,19 @@ constexpr auto compile(S format_str) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename CompiledFormat, typename... Args,
|
template <
|
||||||
|
typename CompiledFormat, typename... Args,
|
||||||
typename Char = typename CompiledFormat::char_type,
|
typename Char = typename CompiledFormat::char_type,
|
||||||
FMT_ENABLE_IF(!std::is_base_of<internal::basic_compiled_format,
|
FMT_ENABLE_IF(internal::is_static_compiled_format<CompiledFormat>::value)>
|
||||||
CompiledFormat>::value)>
|
|
||||||
std::basic_string<Char> format(const CompiledFormat& cf, const Args&... args) {
|
std::basic_string<Char> format(const CompiledFormat& cf, const Args&... args) {
|
||||||
basic_memory_buffer<Char> buffer;
|
basic_memory_buffer<Char> buffer;
|
||||||
cf.format(std::back_inserter(buffer), args...);
|
cf.format(std::back_inserter(buffer), args...);
|
||||||
return to_string(buffer);
|
return to_string(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename OutputIt, typename CompiledFormat, typename... Args,
|
template <
|
||||||
FMT_ENABLE_IF(!std::is_base_of<internal::basic_compiled_format,
|
typename OutputIt, typename CompiledFormat, typename... Args,
|
||||||
CompiledFormat>::value)>
|
FMT_ENABLE_IF(internal::is_static_compiled_format<CompiledFormat>::value)>
|
||||||
OutputIt format_to(OutputIt out, const CompiledFormat& cf,
|
OutputIt format_to(OutputIt out, const CompiledFormat& cf,
|
||||||
const Args&... args) {
|
const Args&... args) {
|
||||||
return cf.format(out, args...);
|
return cf.format(out, args...);
|
||||||
|
Loading…
Reference in New Issue
Block a user