brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 0a2a941 Raw
75 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++1410// TODO: Change to XFAIL once https://llvm.org/PR40995 is fixed11// UNSUPPORTED: availability-pmr-missing12 13// <string>14 15// namespace std::pmr {16// template <class Char, class Traits = ...>17// using basic_string =18//     ::std::basic_string<Char, Traits, polymorphic_allocator<Char>>19//20// typedef ... string21// typedef ... u16string22// typedef ... u32string23// typedef ... wstring24//25// } // namespace std::pmr26 27#include <string>28#include <cassert>29#include <memory_resource>30#include <type_traits>31 32#include "constexpr_char_traits.h"33#include "test_macros.h"34 35template <class Char, class PmrTypedef>36void test_string_typedef() {37  using StdStr = std::basic_string<Char, std::char_traits<Char>, std::pmr::polymorphic_allocator<Char>>;38  using PmrStr = std::pmr::basic_string<Char>;39  static_assert(std::is_same<StdStr, PmrStr>::value, "");40  static_assert(std::is_same<PmrStr, PmrTypedef>::value, "");41}42 43template <class Char, class Traits>44void test_basic_string_alias() {45  using StdStr = std::basic_string<Char, Traits, std::pmr::polymorphic_allocator<Char>>;46  using PmrStr = std::pmr::basic_string<Char, Traits>;47  static_assert(std::is_same<StdStr, PmrStr>::value, "");48}49 50int main(int, char**) {51  {52    test_string_typedef<char, std::pmr::string>();53#ifndef TEST_HAS_NO_WIDE_CHARACTERS54    test_string_typedef<wchar_t, std::pmr::wstring>();55#endif56    test_string_typedef<char16_t, std::pmr::u16string>();57    test_string_typedef<char32_t, std::pmr::u32string>();58  }59  {60    test_basic_string_alias<char, constexpr_char_traits<char>>();61#ifndef TEST_HAS_NO_WIDE_CHARACTERS62    test_basic_string_alias<wchar_t, constexpr_char_traits<wchar_t>>();63#endif64    test_basic_string_alias<char16_t, constexpr_char_traits<char16_t>>();65    test_basic_string_alias<char32_t, constexpr_char_traits<char32_t>>();66  }67  {68    // Check that std::basic_string has been included and is complete.69    std::pmr::string s;70    assert(s.get_allocator().resource() == std::pmr::get_default_resource());71  }72 73  return 0;74}75