diff options
| author | Marshall Clow <mclow.lists@gmail.com> | 2018-03-21 00:36:05 +0000 |
|---|---|---|
| committer | Marshall Clow <mclow.lists@gmail.com> | 2018-03-21 00:36:05 +0000 |
| commit | 4a6f3c471040807e0ef6534893fdc3fbcdd796a4 (patch) | |
| tree | eb919bcc4cf2055f37db18d69a06a34a69f91df9 /libcxx/test/std/strings | |
| parent | 1c1057af0b56f7d8defbf81c64a53e55cc95c147 (diff) | |
| download | bcm5719-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.cpp | 53 | ||||
| -rw-r--r-- | libcxx/test/std/strings/string.view/char.bad.fail.cpp | 53 |
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"}} + } +} |

