1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03, c++11, c++14 10 11 // <string_view> 12 13 // Test that the constructors offered by std::basic_string_view are formulated 14 // so they're compatible with implicit deduction guides. 15 16 #include <string_view> 17 #include <cassert> 18 19 #include "test_macros.h" 20 #include "constexpr_char_traits.h" 21 22 // Overloads 23 // --------------- 24 // (1) basic_string_view() - NOT TESTED 25 // (2) basic_string_view(const basic_string_view&) 26 // (3) basic_string_view(const CharT*, size_type) 27 // (4) basic_string_view(const CharT*) 28 int main(int, char**) 29 { 30 { // Testing (1) 31 // Nothing to do. Cannot deduce without any arguments. 32 } 33 { // Testing (2) 34 const std::string_view sin("abc"); 35 std::basic_string_view s(sin); 36 ASSERT_SAME_TYPE(decltype(s), std::string_view); 37 assert(s == "abc"); 38 39 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 40 using WSV = std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>>; 41 const WSV win(L"abcdef"); 42 std::basic_string_view w(win); 43 ASSERT_SAME_TYPE(decltype(w), WSV); 44 assert(w == L"abcdef"); 45 #endif 46 } 47 { // Testing (3) 48 std::basic_string_view s("abc", 2); 49 ASSERT_SAME_TYPE(decltype(s), std::string_view); 50 assert(s == "ab"); 51 52 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 53 std::basic_string_view w(L"abcdef", 4); 54 ASSERT_SAME_TYPE(decltype(w), std::wstring_view); 55 assert(w == L"abcd"); 56 #endif 57 } 58 { // Testing (4) 59 std::basic_string_view s("abc"); 60 ASSERT_SAME_TYPE(decltype(s), std::string_view); 61 assert(s == "abc"); 62 63 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 64 std::basic_string_view w(L"abcdef"); 65 ASSERT_SAME_TYPE(decltype(w), std::wstring_view); 66 assert(w == L"abcdef"); 67 #endif 68 } 69 70 return 0; 71 } 72