summaryrefslogtreecommitdiff
path: root/test/std/strings/basic.string/char.bad.fail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/strings/basic.string/char.bad.fail.cpp')
-rw-r--r--test/std/strings/basic.string/char.bad.fail.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/test/std/strings/basic.string/char.bad.fail.cpp b/test/std/strings/basic.string/char.bad.fail.cpp
new file mode 100644
index 000000000000..1878cd02ca38
--- /dev/null
+++ b/test/std/strings/basic.string/char.bad.fail.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+// ... manipulating sequences of any non-array trivial standard-layout types.
+
+#include <string>
+#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()
+{
+ {
+// array
+ typedef char C[3];
+ static_assert(std::is_array<C>::value, "");
+ std::basic_string<C, test_traits<C> > 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<NotTrivial>::value, "");
+ std::basic_string<NotTrivial, test_traits<NotTrivial> > 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<NotStandardLayout>::value, "");
+ std::basic_string<NotStandardLayout, test_traits<NotStandardLayout> > s;
+// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be standard-layout"}}
+ }
+}