blob: bace91c3222b4514d87dfea674285aae673006d1 [file] [log] [blame]
Marshall Clow4a6f3c42018-03-21 00:36:05 +00001//===----------------------------------------------------------------------===//
2//
Chandler Carruth57b08b02019-01-19 10:56:40 +00003// 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
Marshall Clow4a6f3c42018-03-21 00:36:05 +00006//
7//===----------------------------------------------------------------------===//
8
9// <string>
10// ... manipulating sequences of any non-array trivial standard-layout types.
11
12#include <string>
13#include "test_traits.h"
14
15struct NotTrivial {
16 NotTrivial() : value(3) {}
17 int value;
18};
19
20struct NotStandardLayout {
21public:
22 NotStandardLayout() : one(1), two(2) {}
23 int sum() const { return one + two; } // silences "unused field 'two' warning"
24 int one;
25private:
26 int two;
27};
28
JF Bastien2df59c52019-02-04 20:31:13 +000029int main(int, char**)
Marshall Clow4a6f3c42018-03-21 00:36:05 +000030{
31 {
32// array
33 typedef char C[3];
34 static_assert(std::is_array<C>::value, "");
35 std::basic_string<C, test_traits<C> > s;
36// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must not be an array"}}
37 }
38
39 {
40// not trivial
41 static_assert(!std::is_trivial<NotTrivial>::value, "");
42 std::basic_string<NotTrivial, test_traits<NotTrivial> > s;
43// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be trivial"}}
44 }
45
46 {
47// not standard layout
48 static_assert(!std::is_standard_layout<NotStandardLayout>::value, "");
49 std::basic_string<NotStandardLayout, test_traits<NotStandardLayout> > s;
50// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be standard-layout"}}
51 }
JF Bastien2df59c52019-02-04 20:31:13 +000052
53 return 0;
Marshall Clow4a6f3c42018-03-21 00:36:05 +000054}