1b82dcb62SLouis Dionne //===----------------------------------------------------------------------===// 2b82dcb62SLouis Dionne // 3b82dcb62SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4b82dcb62SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5b82dcb62SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b82dcb62SLouis Dionne // 7b82dcb62SLouis Dionne //===----------------------------------------------------------------------===// 8b82dcb62SLouis Dionne 9b82dcb62SLouis Dionne // UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14) 10b82dcb62SLouis Dionne 11*b9a2658aSNikolas Klauser // XFAIL: FROZEN-CXX03-HEADERS-FIXME 12*b9a2658aSNikolas Klauser 13b82dcb62SLouis Dionne // <string_view> 14b82dcb62SLouis Dionne // ... manipulating sequences of any non-array trivial standard-layout types. 15b82dcb62SLouis Dionne 16b82dcb62SLouis Dionne #include <string> 17b82dcb62SLouis Dionne #include "../basic.string/test_traits.h" 18b82dcb62SLouis Dionne 19b82dcb62SLouis Dionne struct NotTrivial { 20b82dcb62SLouis Dionne NotTrivial() : value(3) {} 21b82dcb62SLouis Dionne int value; 22b82dcb62SLouis Dionne }; 23b82dcb62SLouis Dionne 24b82dcb62SLouis Dionne struct NotStandardLayout { 25b82dcb62SLouis Dionne public: 26b82dcb62SLouis Dionne NotStandardLayout() : one(1), two(2) {} 27b82dcb62SLouis Dionne int sum() const { return one + two; } // silences "unused field 'two' warning" 28b82dcb62SLouis Dionne int one; 29a40bada9SBrendan Emery 30b82dcb62SLouis Dionne private: 31b82dcb62SLouis Dionne int two; 32b82dcb62SLouis Dionne }; 33b82dcb62SLouis Dionne 34a40bada9SBrendan Emery int main(int, char**) { 35b82dcb62SLouis Dionne { 36b82dcb62SLouis Dionne // array 37b82dcb62SLouis Dionne typedef char C[3]; 38b82dcb62SLouis Dionne static_assert(std::is_array<C>::value, ""); 39b82dcb62SLouis Dionne std::basic_string_view<C, test_traits<C> > sv; 409bb9ec38SLouis Dionne // expected-error-re@string_view:* {{static assertion failed{{.*}}Character type of basic_string_view must not be an array}} 41b82dcb62SLouis Dionne } 42b82dcb62SLouis Dionne 43b82dcb62SLouis Dionne { 44b82dcb62SLouis Dionne // not trivial 45b82dcb62SLouis Dionne static_assert(!std::is_trivial<NotTrivial>::value, ""); 46b82dcb62SLouis Dionne std::basic_string_view<NotTrivial, test_traits<NotTrivial> > sv; 479bb9ec38SLouis Dionne // expected-error-re@string_view:* {{static assertion failed{{.*}}Character type of basic_string_view must be trivial}} 48b82dcb62SLouis Dionne } 49b82dcb62SLouis Dionne 50b82dcb62SLouis Dionne { 51b82dcb62SLouis Dionne // not standard layout 52b82dcb62SLouis Dionne static_assert(!std::is_standard_layout<NotStandardLayout>::value, ""); 53b82dcb62SLouis Dionne std::basic_string_view<NotStandardLayout, test_traits<NotStandardLayout> > sv; 549bb9ec38SLouis Dionne // expected-error-re@string_view:* {{static assertion failed{{.*}}Character type of basic_string_view must be standard-layout}} 55b82dcb62SLouis Dionne } 56b82dcb62SLouis Dionne 57b82dcb62SLouis Dionne return 0; 58b82dcb62SLouis Dionne } 59