tiptoeing into class template argument deduction.
Signed-off-by: Daniela Engert <dani@ngrt.de>
This commit is contained in:
parent
041bf83d9b
commit
604b4c41f2
@ -139,6 +139,13 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if FMT_HAS_FEATURE(__cpp_deduction_guides) || \
|
||||||
|
(defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1914)
|
||||||
|
# define FMT_HAS_CTAD 1
|
||||||
|
#else
|
||||||
|
# define FMT_HAS_CTAD 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef FMT_BEGIN_NAMESPACE
|
#ifndef FMT_BEGIN_NAMESPACE
|
||||||
# if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \
|
# if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \
|
||||||
FMT_MSC_VER >= 1900
|
FMT_MSC_VER >= 1900
|
||||||
@ -434,6 +441,18 @@ class basic_string_view {
|
|||||||
|
|
||||||
typedef basic_string_view<char> string_view;
|
typedef basic_string_view<char> string_view;
|
||||||
typedef basic_string_view<wchar_t> wstring_view;
|
typedef basic_string_view<wchar_t> wstring_view;
|
||||||
|
#if FMT_HAS_CTAD
|
||||||
|
template<typename Char>
|
||||||
|
basic_string_view(const Char *, size_t) -> basic_string_view<Char>;
|
||||||
|
template<typename Char>
|
||||||
|
basic_string_view(const Char *) -> basic_string_view<Char>;
|
||||||
|
template<typename Char, typename Alloc>
|
||||||
|
basic_string_view(const std::basic_string<Char, Alloc> &) -> basic_string_view<Char>;
|
||||||
|
#ifdef FMT_STRING_VIEW
|
||||||
|
template<typename Char>
|
||||||
|
basic_string_view(FMT_STRING_VIEW<Char>) -> basic_string_view<Char>;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// A base class for compile-time strings. It is defined in the fmt namespace to
|
// A base class for compile-time strings. It is defined in the fmt namespace to
|
||||||
// make formatting functions visible via ADL, e.g. format(fmt("{}"), 42).
|
// make formatting functions visible via ADL, e.g. format(fmt("{}"), 42).
|
||||||
|
|||||||
@ -32,6 +32,7 @@ using fmt::basic_format_arg;
|
|||||||
using fmt::internal::basic_buffer;
|
using fmt::internal::basic_buffer;
|
||||||
using fmt::internal::value;
|
using fmt::internal::value;
|
||||||
using fmt::string_view;
|
using fmt::string_view;
|
||||||
|
using fmt::wstring_view;
|
||||||
|
|
||||||
using testing::_;
|
using testing::_;
|
||||||
using testing::StrictMock;
|
using testing::StrictMock;
|
||||||
@ -437,6 +438,31 @@ TEST(StringViewTest, Compare) {
|
|||||||
check_op<std::greater_equal>();
|
check_op<std::greater_equal>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FMT_HAS_CTAD
|
||||||
|
|
||||||
|
TEST(BasicStringViewTest, ClassTemplateArgumentDeduction) {
|
||||||
|
// Test that basic_string_view<Char> is correctly deduced
|
||||||
|
char str[] = "some string";
|
||||||
|
const std::size_t slen = strlen(str);
|
||||||
|
const string_view sv(str);
|
||||||
|
EXPECT_EQ(sv, fmt::basic_string_view(str));
|
||||||
|
EXPECT_EQ(sv, fmt::basic_string_view(str, slen));
|
||||||
|
EXPECT_EQ(sv, fmt::basic_string_view(std::string(str)));
|
||||||
|
#ifdef FMT_STRING_VIEW
|
||||||
|
EXPECT_EQ(sv, fmt::basic_string_view(FMT_STRING_VIEW<char>(str)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// wide character types
|
||||||
|
const wchar_t *wstr = L"some string";
|
||||||
|
EXPECT_EQ(wstring_view(wstr), fmt::basic_string_view(wstr));
|
||||||
|
const char16_t *c16str = u"some string";
|
||||||
|
EXPECT_EQ(fmt::basic_string_view<char16_t>(c16str), fmt::basic_string_view(c16str));
|
||||||
|
const char32_t *c32str = U"some string";
|
||||||
|
EXPECT_EQ(fmt::basic_string_view<char32_t>(c32str), fmt::basic_string_view(c32str));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
enum basic_enum {};
|
enum basic_enum {};
|
||||||
|
|
||||||
TEST(CoreTest, ConvertToInt) {
|
TEST(CoreTest, ConvertToInt) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user