summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/strings
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2018-03-21 00:36:05 +0000
committerMarshall Clow <mclow.lists@gmail.com>2018-03-21 00:36:05 +0000
commit4a6f3c471040807e0ef6534893fdc3fbcdd796a4 (patch)
treeeb919bcc4cf2055f37db18d69a06a34a69f91df9 /libcxx/test/std/strings
parent1c1057af0b56f7d8defbf81c64a53e55cc95c147 (diff)
downloadbcm5719-llvm-4a6f3c471040807e0ef6534893fdc3fbcdd796a4.tar.gz
bcm5719-llvm-4a6f3c471040807e0ef6534893fdc3fbcdd796a4.zip
Implement LWG3034: P0767R1 breaks previously-standard-layout types
llvm-svn: 328064
Diffstat (limited to 'libcxx/test/std/strings')
-rw-r--r--libcxx/test/std/strings/basic.string/char.bad.fail.cpp53
-rw-r--r--libcxx/test/std/strings/string.view/char.bad.fail.cpp53
2 files changed, 106 insertions, 0 deletions
diff --git a/libcxx/test/std/strings/basic.string/char.bad.fail.cpp b/libcxx/test/std/strings/basic.string/char.bad.fail.cpp
new file mode 100644
index 00000000000..1878cd02ca3
--- /dev/null
+++ b/libcxx/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"}}
+ }
+}
diff --git a/libcxx/test/std/strings/string.view/char.bad.fail.cpp b/libcxx/test/std/strings/string.view/char.bad.fail.cpp
new file mode 100644
index 00000000000..cbd2b47b913
--- /dev/null
+++ b/libcxx/test/std/strings/string.view/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_view>
+// ... manipulating sequences of any non-array trivial standard-layout types.
+
+#include <string>
+#include "../basic.string/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_view<C, test_traits<C> > sv;
+// expected-error-re@string_view:* {{static_assert failed{{.*}} "Character type of basic_string_view must not be an array"}}
+ }
+
+ {
+// not trivial
+ static_assert(!std::is_trivial<NotTrivial>::value, "");
+ std::basic_string_view<NotTrivial, test_traits<NotTrivial> > sv;
+// expected-error-re@string_view:* {{static_assert failed{{.*}} "Character type of basic_string_view must be trivial"}}
+ }
+
+ {
+// not standard layout
+ static_assert(!std::is_standard_layout<NotStandardLayout>::value, "");
+ std::basic_string_view<NotStandardLayout, test_traits<NotStandardLayout> > sv;
+// expected-error-re@string_view:* {{static_assert failed{{.*}} "Character type of basic_string_view must be standard-layout"}}
+ }
+}
OpenPOWER on IntegriCloud