Added support for format string containing '\0' in _format udl (#619) (#620)

Added support for strings containing '\0' in udl (#619)
This commit is contained in:
Artem Golubikhin 2017-12-06 17:21:34 +03:00 committed by Victor Zverovich
parent 84bd2f1962
commit 3aaa25fa70
2 changed files with 9 additions and 3 deletions

View File

@ -4093,7 +4093,7 @@ class udl_formatter {
# else # else
template <typename Char> template <typename Char>
struct udl_formatter { struct udl_formatter {
const Char *str; basic_string_view<Char> str;
template <typename... Args> template <typename... Args>
auto operator()(Args && ... args) const auto operator()(Args && ... args) const
@ -4134,9 +4134,9 @@ constexpr internal::udl_formatter<Char, CHARS...> operator""_format() {
\endrst \endrst
*/ */
inline internal::udl_formatter<char> inline internal::udl_formatter<char>
operator"" _format(const char *s, std::size_t) { return {s}; } operator"" _format(const char *s, std::size_t n) { return {{s, n}}; }
inline internal::udl_formatter<wchar_t> inline internal::udl_formatter<wchar_t>
operator"" _format(const wchar_t *s, std::size_t) { return {s}; } operator"" _format(const wchar_t *s, std::size_t n) { return {{s, n}}; }
# endif // FMT_UDL_TEMPLATE # endif // FMT_UDL_TEMPLATE
/** /**

View File

@ -1469,6 +1469,11 @@ TEST(LiteralsTest, Format) {
EXPECT_EQ(format("{}c{}", "ab", 1), udl_format); EXPECT_EQ(format("{}c{}", "ab", 1), udl_format);
auto udl_format_w = L"{}c{}"_format(L"ab", 1); auto udl_format_w = L"{}c{}"_format(L"ab", 1);
EXPECT_EQ(format(L"{}c{}", L"ab", 1), udl_format_w); EXPECT_EQ(format(L"{}c{}", L"ab", 1), udl_format_w);
auto udl_format_null_char = "{}c\0d{}"_format("ab", 1);
EXPECT_EQ(format("{}c\0d{}", "ab", 1), udl_format_null_char);
auto udl_format_w_null_char = L"{}c\0d{}"_format(L"ab", 1);
EXPECT_EQ(format(L"{}c\0d{}", L"ab", 1), udl_format_w_null_char);
} }
TEST(LiteralsTest, NamedArg) { TEST(LiteralsTest, NamedArg) {
@ -1529,6 +1534,7 @@ TEST(FormatTest, CustomArgFormatter) {
TEST(FormatTest, NonNullTerminatedFormatString) { TEST(FormatTest, NonNullTerminatedFormatString) {
EXPECT_EQ("42", format(string_view("{}foo", 2), 42)); EXPECT_EQ("42", format(string_view("{}foo", 2), 42));
EXPECT_EQ("42f\0oo", format(string_view("{}f\0oo", 6), 42));
} }
struct variant { struct variant {