//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // ... manipulating sequences of any non-array trivial standard-layout types. #include #include "test_traits.h" struct NotTrivial { NotTrivial() : value(3) {} int value; }; struct NotStandardLayout { public: NotStandardLayout() : one(1), two(2) {} int sum() const { return one + two; } // silences "unused field 'two' warning" int one; private: int two; }; int main(int, char**) { { // array typedef char C[3]; static_assert(std::is_array::value, ""); std::basic_string > s; // expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must not be an array"}} } { // not trivial static_assert(!std::is_trivial::value, ""); std::basic_string > s; // expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be trivial"}} } { // not standard layout static_assert(!std::is_standard_layout::value, ""); std::basic_string > s; // expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be standard-layout"}} } return 0; }