diff --git a/libcxx/test/std/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp b/libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp similarity index 63% rename from libcxx/test/std/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp rename to libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp index 35aa54b1772b3..eb126ec1e3ad7 100644 --- a/libcxx/test/std/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp +++ b/libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp @@ -16,6 +16,8 @@ // with the wrong CharTraits. To avoid our having to create working // ostreams with weird CharTraits, this is a compile-only test. +// It is unspecified whether these operators are SFINAE-friendly. We choose to make them so. + #include #include #include @@ -26,44 +28,47 @@ #include "test_allocator.h" #include "test_macros.h" -template -decltype(std::declval() >> std::declval(), std::true_type()) -has_rightshift_impl(int) { return std::true_type(); } +template +decltype(std::declval() >> std::declval(), std::true_type()) has_rightshift_impl(int) { + return std::true_type(); +} -template -std::false_type -has_rightshift_impl(long) { return std::false_type(); } +template +std::false_type has_rightshift_impl(long) { + return std::false_type(); +} -template +template struct HasRightShift : decltype(has_rightshift_impl(0)) {}; -template -decltype(std::declval() << std::declval(), std::true_type()) -has_leftshift_impl(int) { return std::true_type(); } +template +decltype(std::declval() << std::declval(), std::true_type()) has_leftshift_impl(int) { + return std::true_type(); +} -template -std::false_type -has_leftshift_impl(long) { return std::false_type(); } +template +std::false_type has_leftshift_impl(long) { + return std::false_type(); +} -template +template struct HasLeftShift : decltype(has_leftshift_impl(0)) {}; -template +template struct FakeCharTraits : std::char_traits {}; -void test_string_literal() -{ +void test_string_literal() { using Q = decltype(std::quoted("hello")); - static_assert( HasLeftShift::value, ""); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); - static_assert( HasLeftShift>&, Q>::value, ""); + static_assert(HasLeftShift>&, Q>::value, ""); static_assert(!HasRightShift>&, Q>::value, ""); #ifndef TEST_HAS_NO_WIDE_CHARACTERS using WQ = decltype(std::quoted(L"hello")); - static_assert( HasLeftShift::value, ""); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); - static_assert( HasLeftShift>&, WQ>::value, ""); + static_assert(HasLeftShift>&, WQ>::value, ""); static_assert(!HasRightShift>&, WQ>::value, ""); static_assert(!HasLeftShift::value, ""); @@ -71,15 +76,14 @@ void test_string_literal() #endif // TEST_HAS_NO_WIDE_CHARACTERS } -void test_std_string() -{ - std::string s = "hello"; +void test_std_string() { + std::string s = "hello"; const auto& cs = s; - using Q = decltype(std::quoted(s)); - using CQ = decltype(std::quoted(cs)); - static_assert( HasLeftShift::value, ""); - static_assert( HasRightShift::value, ""); - static_assert( HasLeftShift::value, ""); + using Q = decltype(std::quoted(s)); + using CQ = decltype(std::quoted(cs)); + static_assert(HasLeftShift::value, ""); + static_assert(HasRightShift::value, ""); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); static_assert(!HasLeftShift>&, Q>::value, ""); static_assert(!HasRightShift>&, Q>::value, ""); @@ -87,26 +91,26 @@ void test_std_string() static_assert(!HasRightShift>&, CQ>::value, ""); std::basic_string, test_allocator> st = "hello"; - const auto& cst = st; - using QT = decltype(std::quoted(st)); - using CQT = decltype(std::quoted(cst)); + const auto& cst = st; + using QT = decltype(std::quoted(st)); + using CQT = decltype(std::quoted(cst)); static_assert(!HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); static_assert(!HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); - static_assert( HasLeftShift>&, QT>::value, ""); - static_assert( HasRightShift>&, QT>::value, ""); - static_assert( HasLeftShift>&, CQT>::value, ""); + static_assert(HasLeftShift>&, QT>::value, ""); + static_assert(HasRightShift>&, QT>::value, ""); + static_assert(HasLeftShift>&, CQT>::value, ""); static_assert(!HasRightShift>&, CQT>::value, ""); #ifndef TEST_HAS_NO_WIDE_CHARACTERS std::wstring ws = L"hello"; const auto& cws = ws; - using WQ = decltype(std::quoted(ws)); - using CWQ = decltype(std::quoted(cws)); - static_assert( HasLeftShift::value, ""); - static_assert( HasRightShift::value, ""); - static_assert( HasLeftShift::value, ""); + using WQ = decltype(std::quoted(ws)); + using CWQ = decltype(std::quoted(cws)); + static_assert(HasLeftShift::value, ""); + static_assert(HasRightShift::value, ""); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); static_assert(!HasLeftShift>&, WQ>::value, ""); static_assert(!HasRightShift>&, WQ>::value, ""); @@ -118,15 +122,14 @@ void test_std_string() #endif // TEST_HAS_NO_WIDE_CHARACTERS } -void test_std_string_view() -{ +void test_std_string_view() { std::string_view s = "hello"; - const auto& cs = s; - using Q = decltype(std::quoted(s)); - using CQ = decltype(std::quoted(cs)); - static_assert( HasLeftShift::value, ""); + const auto& cs = s; + using Q = decltype(std::quoted(s)); + using CQ = decltype(std::quoted(cs)); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); - static_assert( HasLeftShift::value, ""); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); static_assert(!HasLeftShift>&, Q>::value, ""); static_assert(!HasRightShift>&, Q>::value, ""); @@ -134,26 +137,26 @@ void test_std_string_view() static_assert(!HasRightShift>&, CQ>::value, ""); std::basic_string_view> st = "hello"; - const auto& cst = st; - using QT = decltype(std::quoted(st)); - using CQT = decltype(std::quoted(cst)); + const auto& cst = st; + using QT = decltype(std::quoted(st)); + using CQT = decltype(std::quoted(cst)); static_assert(!HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); static_assert(!HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); - static_assert( HasLeftShift>&, QT>::value, ""); + static_assert(HasLeftShift>&, QT>::value, ""); static_assert(!HasRightShift>&, QT>::value, ""); - static_assert( HasLeftShift>&, CQT>::value, ""); + static_assert(HasLeftShift>&, CQT>::value, ""); static_assert(!HasRightShift>&, CQT>::value, ""); #ifndef TEST_HAS_NO_WIDE_CHARACTERS std::wstring_view ws = L"hello"; - const auto& cws = ws; - using WQ = decltype(std::quoted(ws)); - using CWQ = decltype(std::quoted(cws)); - static_assert( HasLeftShift::value, ""); + const auto& cws = ws; + using WQ = decltype(std::quoted(ws)); + using CWQ = decltype(std::quoted(cws)); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); - static_assert( HasLeftShift::value, ""); + static_assert(HasLeftShift::value, ""); static_assert(!HasRightShift::value, ""); static_assert(!HasLeftShift>&, WQ>::value, ""); static_assert(!HasRightShift>&, WQ>::value, "");