forked from fmtlib/fmt
Move compile string to detail
This commit is contained in:
@@ -493,15 +493,14 @@ using string_view = basic_string_view<char>;
|
|||||||
template <typename T> struct is_char : std::false_type {};
|
template <typename T> struct is_char : std::false_type {};
|
||||||
template <> struct is_char<char> : std::true_type {};
|
template <> struct is_char<char> : std::true_type {};
|
||||||
|
|
||||||
// A base class for compile-time strings. It is defined in the fmt namespace to
|
FMT_BEGIN_DETAIL_NAMESPACE
|
||||||
// make formatting functions visible via ADL, e.g. format(FMT_STRING("{}"), 42).
|
|
||||||
|
// A base class for compile-time strings.
|
||||||
struct compile_string {};
|
struct compile_string {};
|
||||||
|
|
||||||
template <typename S>
|
template <typename S>
|
||||||
struct is_compile_string : std::is_base_of<compile_string, S> {};
|
struct is_compile_string : std::is_base_of<compile_string, S> {};
|
||||||
|
|
||||||
FMT_BEGIN_DETAIL_NAMESPACE
|
|
||||||
|
|
||||||
// Returns a string view of `s`.
|
// Returns a string view of `s`.
|
||||||
template <typename Char, FMT_ENABLE_IF(is_char<Char>::value)>
|
template <typename Char, FMT_ENABLE_IF(is_char<Char>::value)>
|
||||||
FMT_INLINE auto to_string_view(const Char* s) -> basic_string_view<Char> {
|
FMT_INLINE auto to_string_view(const Char* s) -> basic_string_view<Char> {
|
||||||
@@ -519,8 +518,7 @@ constexpr auto to_string_view(basic_string_view<Char> s)
|
|||||||
}
|
}
|
||||||
template <typename Char,
|
template <typename Char,
|
||||||
FMT_ENABLE_IF(!std::is_empty<std_string_view<Char>>::value)>
|
FMT_ENABLE_IF(!std::is_empty<std_string_view<Char>>::value)>
|
||||||
inline auto to_string_view(std_string_view<Char> s)
|
inline auto to_string_view(std_string_view<Char> s) -> basic_string_view<Char> {
|
||||||
-> basic_string_view<Char> {
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
template <typename S, FMT_ENABLE_IF(is_compile_string<S>::value)>
|
template <typename S, FMT_ENABLE_IF(is_compile_string<S>::value)>
|
||||||
@@ -533,6 +531,7 @@ void to_string_view(...);
|
|||||||
// Specifies whether S is a string type convertible to fmt::basic_string_view.
|
// Specifies whether S is a string type convertible to fmt::basic_string_view.
|
||||||
// It should be a constexpr function but MSVC 2017 fails to compile it in
|
// It should be a constexpr function but MSVC 2017 fails to compile it in
|
||||||
// enable_if and MSVC 2015 fails to compile it as an alias template.
|
// enable_if and MSVC 2015 fails to compile it as an alias template.
|
||||||
|
// ADL invocation of to_string_view is DEPRECATED!
|
||||||
template <typename S>
|
template <typename S>
|
||||||
struct is_string : std::is_class<decltype(to_string_view(std::declval<S>()))> {
|
struct is_string : std::is_class<decltype(to_string_view(std::declval<S>()))> {
|
||||||
};
|
};
|
||||||
@@ -2918,7 +2917,7 @@ FMT_INLINE void check_format_string(const S&) {
|
|||||||
template <typename... Args, typename S,
|
template <typename... Args, typename S,
|
||||||
FMT_ENABLE_IF(is_compile_string<S>::value)>
|
FMT_ENABLE_IF(is_compile_string<S>::value)>
|
||||||
void check_format_string(S format_str) {
|
void check_format_string(S format_str) {
|
||||||
FMT_CONSTEXPR auto s = to_string_view(format_str);
|
FMT_CONSTEXPR auto s = basic_string_view<typename S::char_type>(format_str);
|
||||||
using checker = format_string_checker<typename S::char_type, error_handler,
|
using checker = format_string_checker<typename S::char_type, error_handler,
|
||||||
remove_cvref_t<Args>...>;
|
remove_cvref_t<Args>...>;
|
||||||
FMT_CONSTEXPR bool invalid_format =
|
FMT_CONSTEXPR bool invalid_format =
|
||||||
|
@@ -1762,7 +1762,7 @@ inline auto find_escape(const char* begin, const char* end)
|
|||||||
std::string s = fmt::format(FMT_STRING("{:d}"), "foo");
|
std::string s = fmt::format(FMT_STRING("{:d}"), "foo");
|
||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::compile_string, )
|
#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
|
||||||
|
|
||||||
template <size_t width, typename Char, typename OutputIt>
|
template <size_t width, typename Char, typename OutputIt>
|
||||||
auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
|
auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
|
||||||
|
@@ -165,8 +165,9 @@ TEST(ostream_test, join_fallback_formatter) {
|
|||||||
|
|
||||||
#if FMT_USE_CONSTEXPR
|
#if FMT_USE_CONSTEXPR
|
||||||
TEST(ostream_test, constexpr_string) {
|
TEST(ostream_test, constexpr_string) {
|
||||||
EXPECT_EQ("42", format(FMT_STRING("{}"), std::string("42")));
|
EXPECT_EQ("42", fmt::format(FMT_STRING("{}"), std::string("42")));
|
||||||
EXPECT_EQ("a string", format(FMT_STRING("{0}"), test_string("a string")));
|
EXPECT_EQ("a string",
|
||||||
|
fmt::format(FMT_STRING("{0}"), test_string("a string")));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user