Remove remaining wchar_t instantiation
This commit is contained in:
parent
e253b371b2
commit
5944fcad37
@ -9,7 +9,8 @@ The {fmt} library API consists of the following parts:
|
|||||||
* :ref:`fmt/core.h <core-api>`: the core API providing argument handling
|
* :ref:`fmt/core.h <core-api>`: the core API providing argument handling
|
||||||
facilities and a lightweight subset of formatting functions
|
facilities and a lightweight subset of formatting functions
|
||||||
* :ref:`fmt/format.h <format-api>`: the full format API providing compile-time
|
* :ref:`fmt/format.h <format-api>`: the full format API providing compile-time
|
||||||
format string checks, output iterator and user-defined type support
|
format string checks, wide string, output iterator and user-defined type
|
||||||
|
support
|
||||||
* :ref:`fmt/ranges.h <ranges-api>`: additional formatting support for ranges
|
* :ref:`fmt/ranges.h <ranges-api>`: additional formatting support for ranges
|
||||||
and tuples
|
and tuples
|
||||||
* :ref:`fmt/chrono.h <chrono-api>`: date and time formatting
|
* :ref:`fmt/chrono.h <chrono-api>`: date and time formatting
|
||||||
@ -104,7 +105,7 @@ Format API
|
|||||||
==========
|
==========
|
||||||
|
|
||||||
``fmt/format.h`` defines the full format API providing compile-time format
|
``fmt/format.h`` defines the full format API providing compile-time format
|
||||||
string checks, output iterator and user-defined type support.
|
string checks, wide string, output iterator and user-defined type support.
|
||||||
|
|
||||||
Compile-time Format String Checks
|
Compile-time Format String Checks
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
@ -211,7 +211,4 @@ template FMT_API wchar_t internal::decimal_point_impl(locale_ref);
|
|||||||
|
|
||||||
template FMT_API void internal::buffer<wchar_t>::append(const wchar_t*,
|
template FMT_API void internal::buffer<wchar_t>::append(const wchar_t*,
|
||||||
const wchar_t*);
|
const wchar_t*);
|
||||||
|
|
||||||
template FMT_API std::wstring internal::vformat<wchar_t>(
|
|
||||||
wstring_view, basic_format_args<wformat_context>);
|
|
||||||
FMT_END_NAMESPACE
|
FMT_END_NAMESPACE
|
||||||
|
@ -600,23 +600,6 @@ inline fmt::basic_string_view<Char> to_string_view(const my_string<Char>& s)
|
|||||||
struct non_string {};
|
struct non_string {};
|
||||||
} // namespace my_ns
|
} // namespace my_ns
|
||||||
|
|
||||||
namespace FakeQt {
|
|
||||||
class QString {
|
|
||||||
public:
|
|
||||||
QString(const wchar_t* s) : s_(std::make_shared<std::wstring>(s)) {}
|
|
||||||
const wchar_t* utf16() const FMT_NOEXCEPT { return s_->data(); }
|
|
||||||
int size() const FMT_NOEXCEPT { return static_cast<int>(s_->size()); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::shared_ptr<std::wstring> s_;
|
|
||||||
};
|
|
||||||
|
|
||||||
inline fmt::basic_string_view<wchar_t> to_string_view(const QString& s)
|
|
||||||
FMT_NOEXCEPT {
|
|
||||||
return {s.utf16(), static_cast<std::size_t>(s.size())};
|
|
||||||
}
|
|
||||||
} // namespace FakeQt
|
|
||||||
|
|
||||||
template <typename T> class IsStringTest : public testing::Test {};
|
template <typename T> class IsStringTest : public testing::Test {};
|
||||||
|
|
||||||
typedef ::testing::Types<char, wchar_t, char16_t, char32_t> StringCharTypes;
|
typedef ::testing::Types<char, wchar_t, char16_t, char32_t> StringCharTypes;
|
||||||
@ -642,7 +625,6 @@ TYPED_TEST(IsStringTest, IsString) {
|
|||||||
fmt::internal::is_string<string_view>::value);
|
fmt::internal::is_string<string_view>::value);
|
||||||
EXPECT_TRUE(fmt::internal::is_string<my_ns::my_string<TypeParam>>::value);
|
EXPECT_TRUE(fmt::internal::is_string<my_ns::my_string<TypeParam>>::value);
|
||||||
EXPECT_FALSE(fmt::internal::is_string<my_ns::non_string>::value);
|
EXPECT_FALSE(fmt::internal::is_string<my_ns::non_string>::value);
|
||||||
EXPECT_TRUE(fmt::internal::is_string<FakeQt::QString>::value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(CoreTest, Format) {
|
TEST(CoreTest, Format) {
|
||||||
@ -665,33 +647,16 @@ TEST(CoreTest, FormatTo) {
|
|||||||
|
|
||||||
TEST(CoreTest, ToStringViewForeignStrings) {
|
TEST(CoreTest, ToStringViewForeignStrings) {
|
||||||
using namespace my_ns;
|
using namespace my_ns;
|
||||||
using namespace FakeQt;
|
|
||||||
EXPECT_EQ(to_string_view(my_string<char>("42")), "42");
|
EXPECT_EQ(to_string_view(my_string<char>("42")), "42");
|
||||||
EXPECT_EQ(to_string_view(my_string<wchar_t>(L"42")), L"42");
|
|
||||||
EXPECT_EQ(to_string_view(QString(L"42")), L"42");
|
|
||||||
fmt::internal::type type =
|
fmt::internal::type type =
|
||||||
fmt::internal::mapped_type_constant<my_string<char>,
|
fmt::internal::mapped_type_constant<my_string<char>,
|
||||||
fmt::format_context>::value;
|
fmt::format_context>::value;
|
||||||
EXPECT_EQ(type, fmt::internal::type::string_type);
|
EXPECT_EQ(type, fmt::internal::type::string_type);
|
||||||
type = fmt::internal::mapped_type_constant<my_string<wchar_t>,
|
|
||||||
fmt::wformat_context>::value;
|
|
||||||
EXPECT_EQ(type, fmt::internal::type::string_type);
|
|
||||||
type =
|
|
||||||
fmt::internal::mapped_type_constant<QString, fmt::wformat_context>::value;
|
|
||||||
EXPECT_EQ(type, fmt::internal::type::string_type);
|
|
||||||
// Does not compile: only wide format contexts are compatible with QString!
|
|
||||||
// type = fmt::internal::mapped_type_constant<QString,
|
|
||||||
// fmt::format_context>::value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(CoreTest, FormatForeignStrings) {
|
TEST(CoreTest, FormatForeignStrings) {
|
||||||
using namespace my_ns;
|
using namespace my_ns;
|
||||||
using namespace FakeQt;
|
|
||||||
EXPECT_EQ(fmt::format(my_string<char>("{}"), 42), "42");
|
EXPECT_EQ(fmt::format(my_string<char>("{}"), 42), "42");
|
||||||
EXPECT_EQ(fmt::format(my_string<wchar_t>(L"{}"), 42), L"42");
|
|
||||||
EXPECT_EQ(fmt::format(QString(L"{}"), 42), L"42");
|
|
||||||
EXPECT_EQ(fmt::format(QString(L"{}"), my_string<wchar_t>(L"42")), L"42");
|
|
||||||
EXPECT_EQ(fmt::format(my_string<wchar_t>(L"{}"), QString(L"42")), L"42");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct implicitly_convertible_to_string {
|
struct implicitly_convertible_to_string {
|
||||||
@ -726,15 +691,6 @@ TEST(FormatterTest, FormatExplicitlyConvertibleToStdStringView) {
|
|||||||
fmt::format("{}", explicitly_convertible_to_std_string_view()));
|
fmt::format("{}", explicitly_convertible_to_std_string_view()));
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
struct explicitly_convertible_to_wstring_view {
|
|
||||||
explicit operator fmt::wstring_view() const { return L"foo"; }
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST(FormatterTest, FormatExplicitlyConvertibleToWStringView) {
|
|
||||||
EXPECT_EQ(L"foo",
|
|
||||||
fmt::format(L"{}", explicitly_convertible_to_wstring_view()));
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct disabled_rvalue_conversion {
|
struct disabled_rvalue_conversion {
|
||||||
|
@ -1609,6 +1609,40 @@ TEST(FormatterTest, FormatExplicitlyConvertibleToStdStringView) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// std::is_constructible is broken in MSVC until version 2015.
|
||||||
|
#if !FMT_MSC_VER || FMT_MSC_VER >= 1900
|
||||||
|
struct explicitly_convertible_to_wstring_view {
|
||||||
|
explicit operator fmt::wstring_view() const { return L"foo"; }
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST(FormatTest, FormatExplicitlyConvertibleToWStringView) {
|
||||||
|
EXPECT_EQ(L"foo",
|
||||||
|
fmt::format(L"{}", explicitly_convertible_to_wstring_view()));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace fake_qt {
|
||||||
|
class QString {
|
||||||
|
public:
|
||||||
|
QString(const wchar_t* s) : s_(std::make_shared<std::wstring>(s)) {}
|
||||||
|
const wchar_t* utf16() const FMT_NOEXCEPT { return s_->data(); }
|
||||||
|
int size() const FMT_NOEXCEPT { return static_cast<int>(s_->size()); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::shared_ptr<std::wstring> s_;
|
||||||
|
};
|
||||||
|
|
||||||
|
fmt::basic_string_view<wchar_t> to_string_view(const QString& s) FMT_NOEXCEPT {
|
||||||
|
return {s.utf16(), static_cast<std::size_t>(s.size())};
|
||||||
|
}
|
||||||
|
} // namespace fake_qt
|
||||||
|
|
||||||
|
TEST(FormatTest, FormatForeignStrings) {
|
||||||
|
using fake_qt::QString;
|
||||||
|
EXPECT_EQ(fmt::format(QString(L"{}"), 42), L"42");
|
||||||
|
EXPECT_EQ(fmt::format(QString(L"{}"), QString(L"42")), L"42");
|
||||||
|
}
|
||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
template <> struct formatter<Date> {
|
template <> struct formatter<Date> {
|
||||||
template <typename ParseContext>
|
template <typename ParseContext>
|
||||||
|
Loading…
Reference in New Issue
Block a user