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: !stdlib=libc++ && (c++03 || c++11 || c++14) 10 11 // <string_view> 12 // ... manipulating sequences of any non-array trivial standard-layout types. 13 14 #include <string> 15 #include "../basic.string/test_traits.h" 16 17 struct NotTrivial { 18 NotTrivial() : value(3) {} 19 int value; 20 }; 21 22 struct NotStandardLayout { 23 public: 24 NotStandardLayout() : one(1), two(2) {} 25 int sum() const { return one + two; } // silences "unused field 'two' warning" 26 int one; 27 private: 28 int two; 29 }; 30 31 int main(int, char**) 32 { 33 { 34 // array 35 typedef char C[3]; 36 static_assert(std::is_array<C>::value, ""); 37 std::basic_string_view<C, test_traits<C> > sv; 38 // expected-error-re@string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must not be an array}} 39 } 40 41 { 42 // not trivial 43 static_assert(!std::is_trivial<NotTrivial>::value, ""); 44 std::basic_string_view<NotTrivial, test_traits<NotTrivial> > sv; 45 // expected-error-re@string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must be trivial}} 46 } 47 48 { 49 // not standard layout 50 static_assert(!std::is_standard_layout<NotStandardLayout>::value, ""); 51 std::basic_string_view<NotStandardLayout, test_traits<NotStandardLayout> > sv; 52 // expected-error-re@string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must be standard-layout}} 53 } 54 55 return 0; 56 } 57