15a83710eSEric Fiselier //===----------------------------------------------------------------------===// 25a83710eSEric Fiselier // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65a83710eSEric Fiselier // 75a83710eSEric Fiselier //===----------------------------------------------------------------------===// 86edc12c8SAsiri Rathnayake 931cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11 106edc12c8SAsiri Rathnayake 115a83710eSEric Fiselier #include <string> 125a83710eSEric Fiselier #include <cassert> 135a83710eSEric Fiselier 14289f1ce5SMarshall Clow #include "test_macros.h" 15289f1ce5SMarshall Clow 167dad0bd6SMarshall Clow #if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L 177dad0bd6SMarshall Clow typedef std::u8string u8string; 187dad0bd6SMarshall Clow #else 197dad0bd6SMarshall Clow typedef std::string u8string; 207dad0bd6SMarshall Clow #endif 217dad0bd6SMarshall Clow main(int,char **)22ef2cdfe3SLouis Dionneint main(int, char**) { 235a83710eSEric Fiselier { 245a83710eSEric Fiselier using namespace std::literals::string_literals; 255a83710eSEric Fiselier 26ef2cdfe3SLouis Dionne ASSERT_SAME_TYPE(decltype( "Hi"s), std::string); 27ef2cdfe3SLouis Dionne ASSERT_SAME_TYPE(decltype(u8"Hi"s), u8string); 28*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 29ef2cdfe3SLouis Dionne ASSERT_SAME_TYPE(decltype( L"Hi"s), std::wstring); 30*f4c1258dSLouis Dionne #endif 31ef2cdfe3SLouis Dionne ASSERT_SAME_TYPE(decltype( u"Hi"s), std::u16string); 32ef2cdfe3SLouis Dionne ASSERT_SAME_TYPE(decltype( U"Hi"s), std::u32string); 335a83710eSEric Fiselier 345a83710eSEric Fiselier std::string foo; 35*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 365a83710eSEric Fiselier std::wstring Lfoo; 37*f4c1258dSLouis Dionne #endif 387dad0bd6SMarshall Clow u8string u8foo; 395a83710eSEric Fiselier std::u16string ufoo; 405a83710eSEric Fiselier std::u32string Ufoo; 415a83710eSEric Fiselier 425a83710eSEric Fiselier foo = ""s; assert( foo.size() == 0); 437dad0bd6SMarshall Clow u8foo = u8""s; assert(u8foo.size() == 0); 44*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 455a83710eSEric Fiselier Lfoo = L""s; assert( Lfoo.size() == 0); 46*f4c1258dSLouis Dionne #endif 475a83710eSEric Fiselier ufoo = u""s; assert( ufoo.size() == 0); 485a83710eSEric Fiselier Ufoo = U""s; assert( Ufoo.size() == 0); 495a83710eSEric Fiselier 505a83710eSEric Fiselier foo = " "s; assert( foo.size() == 1); 517dad0bd6SMarshall Clow u8foo = u8" "s; assert(u8foo.size() == 1); 52*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 535a83710eSEric Fiselier Lfoo = L" "s; assert( Lfoo.size() == 1); 54*f4c1258dSLouis Dionne #endif 555a83710eSEric Fiselier ufoo = u" "s; assert( ufoo.size() == 1); 565a83710eSEric Fiselier Ufoo = U" "s; assert( Ufoo.size() == 1); 575a83710eSEric Fiselier 585a83710eSEric Fiselier foo = "ABC"s; assert( foo == "ABC"); assert( foo == std::string ( "ABC")); 597dad0bd6SMarshall Clow u8foo = u8"ABC"s; assert(u8foo == u8"ABC"); assert(u8foo == u8string (u8"ABC")); 60*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 615a83710eSEric Fiselier Lfoo = L"ABC"s; assert( Lfoo == L"ABC"); assert( Lfoo == std::wstring ( L"ABC")); 62*f4c1258dSLouis Dionne #endif 635a83710eSEric Fiselier ufoo = u"ABC"s; assert( ufoo == u"ABC"); assert( ufoo == std::u16string( u"ABC")); 645a83710eSEric Fiselier Ufoo = U"ABC"s; assert( Ufoo == U"ABC"); assert( Ufoo == std::u32string( U"ABC")); 65ef2cdfe3SLouis Dionne } 66ef2cdfe3SLouis Dionne { 67ef2cdfe3SLouis Dionne using namespace std::literals; 68ef2cdfe3SLouis Dionne std::string foo = ""s; 69ef2cdfe3SLouis Dionne assert(foo == std::string()); 70ef2cdfe3SLouis Dionne } 71ef2cdfe3SLouis Dionne { 72ef2cdfe3SLouis Dionne using namespace std; 73ef2cdfe3SLouis Dionne std::string foo = ""s; 74ef2cdfe3SLouis Dionne assert(foo == std::string()); 75ef2cdfe3SLouis Dionne } 762df59c50SJF Bastien 772df59c50SJF Bastien return 0; 785a83710eSEric Fiselier } 79