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 using WSV = std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>>; 40 const WSV win(L"abcdef"); 41 std::basic_string_view w(win); 42 ASSERT_SAME_TYPE(decltype(w), WSV); 43 assert(w == L"abcdef"); 44 } 45 { // Testing (3) 46 std::basic_string_view s("abc", 2); 47 ASSERT_SAME_TYPE(decltype(s), std::string_view); 48 assert(s == "ab"); 49 50 std::basic_string_view w(L"abcdef", 4); 51 ASSERT_SAME_TYPE(decltype(w), std::wstring_view); 52 assert(w == L"abcd"); 53 } 54 { // Testing (4) 55 std::basic_string_view s("abc"); 56 ASSERT_SAME_TYPE(decltype(s), std::string_view); 57 assert(s == "abc"); 58 59 std::basic_string_view w(L"abcdef"); 60 ASSERT_SAME_TYPE(decltype(w), std::wstring_view); 61 assert(w == L"abcdef"); 62 } 63 64 return 0; 65 } 66