| //===----------------------------------------------------------------------===// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | // UNSUPPORTED: c++03, c++11 | 
 |  | 
 | #include <string> | 
 | #include <cassert> | 
 |  | 
 | #include "test_macros.h" | 
 |  | 
 | #if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L | 
 |     typedef std::u8string u8string; | 
 | #else | 
 |     typedef std::string   u8string; | 
 | #endif | 
 |  | 
 | int main(int, char**) { | 
 |     { | 
 |         using namespace std::literals::string_literals; | 
 |  | 
 |         ASSERT_SAME_TYPE(decltype(  "Hi"s), std::string); | 
 |         ASSERT_SAME_TYPE(decltype(u8"Hi"s), u8string); | 
 | #ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
 |         ASSERT_SAME_TYPE(decltype( L"Hi"s), std::wstring); | 
 | #endif | 
 |         ASSERT_SAME_TYPE(decltype( u"Hi"s), std::u16string); | 
 |         ASSERT_SAME_TYPE(decltype( U"Hi"s), std::u32string); | 
 |  | 
 |         std::string foo; | 
 | #ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
 |         std::wstring Lfoo; | 
 | #endif | 
 |         u8string u8foo; | 
 |         std::u16string ufoo; | 
 |         std::u32string Ufoo; | 
 |  | 
 |         foo   =   ""s;     assert(  foo.size() == 0); | 
 |         u8foo = u8""s;     assert(u8foo.size() == 0); | 
 | #ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
 |         Lfoo  =  L""s;     assert( Lfoo.size() == 0); | 
 | #endif | 
 |         ufoo  =  u""s;     assert( ufoo.size() == 0); | 
 |         Ufoo  =  U""s;     assert( Ufoo.size() == 0); | 
 |  | 
 |         foo   =   " "s;    assert(  foo.size() == 1); | 
 |         u8foo = u8" "s;    assert(u8foo.size() == 1); | 
 | #ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
 |         Lfoo  =  L" "s;    assert( Lfoo.size() == 1); | 
 | #endif | 
 |         ufoo  =  u" "s;    assert( ufoo.size() == 1); | 
 |         Ufoo  =  U" "s;    assert( Ufoo.size() == 1); | 
 |  | 
 |         foo   =   "ABC"s;     assert(  foo ==   "ABC");   assert(  foo == std::string   (  "ABC")); | 
 |         u8foo = u8"ABC"s;     assert(u8foo == u8"ABC");   assert(u8foo == u8string      (u8"ABC")); | 
 | #ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
 |         Lfoo  =  L"ABC"s;     assert( Lfoo ==  L"ABC");   assert( Lfoo == std::wstring  ( L"ABC")); | 
 | #endif | 
 |         ufoo  =  u"ABC"s;     assert( ufoo ==  u"ABC");   assert( ufoo == std::u16string( u"ABC")); | 
 |         Ufoo  =  U"ABC"s;     assert( Ufoo ==  U"ABC");   assert( Ufoo == std::u32string( U"ABC")); | 
 |     } | 
 |     { | 
 |         using namespace std::literals; | 
 |         std::string foo = ""s; | 
 |         assert(foo == std::string()); | 
 |     } | 
 |     { | 
 |         using namespace std; | 
 |         std::string foo = ""s; | 
 |         assert(foo == std::string()); | 
 |     } | 
 |  | 
 |     return 0; | 
 | } |