summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities/tuple
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2017-02-06 01:25:31 +0000
committerEric Fiselier <eric@efcs.ca>2017-02-06 01:25:31 +0000
commit9af60c4a8b0132ec395c61c93f7d3e2af622a433 (patch)
tree5585ac50b1ce175c45c2eddbead35c26f2ebd8bd /libcxx/test/std/utilities/tuple
parent75218fb6b1c979ce4891303c0cf2560639d68033 (diff)
downloadbcm5719-llvm-9af60c4a8b0132ec395c61c93f7d3e2af622a433.tar.gz
bcm5719-llvm-9af60c4a8b0132ec395c61c93f7d3e2af622a433.zip
Implement LWG 2773 - std::ignore should be constexpr.
In addition to the PR for LWG 2773 this patch also ensures that each of std::ignores constructors or assignment operators are constexpr. llvm-svn: 294165
Diffstat (limited to 'libcxx/test/std/utilities/tuple')
-rw-r--r--libcxx/test/std/utilities/tuple/tuple.general/ignore.pass.cpp56
-rw-r--r--libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tie.pass.cpp21
2 files changed, 77 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/tuple/tuple.general/ignore.pass.cpp b/libcxx/test/std/utilities/tuple/tuple.general/ignore.pass.cpp
new file mode 100644
index 00000000000..8dae3a5dcb0
--- /dev/null
+++ b/libcxx/test/std/utilities/tuple/tuple.general/ignore.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// 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.
+//
+//===----------------------------------------------------------------------===//
+
+// <tuple>
+
+// constexpr unspecified ignore;
+
+// UNSUPPORTED: c++98, c++03
+
+#include <tuple>
+#include <cassert>
+
+#include "test_macros.h"
+
+constexpr bool test_ignore_constexpr()
+{
+#if TEST_STD_VER > 11
+ { // Test that std::ignore provides constexpr converting assignment.
+ auto& res = (std::ignore = 42);
+ assert(&res == &std::ignore);
+ }
+ { // Test that std::ignore provides constexpr copy/move constructors
+ auto copy = std::ignore;
+ auto moved = std::move(copy);
+ ((void)moved);
+ }
+ { // Test that std::ignore provides constexpr copy/move assignment
+ auto copy = std::ignore;
+ copy = std::ignore;
+ auto moved = std::ignore;
+ moved = std::move(copy);
+ }
+#endif
+ return true;
+}
+
+int main() {
+ {
+ constexpr auto& ignore_v = std::ignore;
+ ((void)ignore_v);
+ }
+ {
+ static_assert(test_ignore_constexpr(), "");
+ }
+#if defined(_LIBCPP_VERSION)
+ {
+ static_assert(std::is_trivial<decltype(std::ignore)>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tie.pass.cpp b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tie.pass.cpp
index c4c3c242d8f..5dc98afe661 100644
--- a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tie.pass.cpp
+++ b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tie.pass.cpp
@@ -22,6 +22,24 @@
#include "test_macros.h"
+#if TEST_STD_VER > 11
+constexpr bool test_tie_constexpr() {
+ {
+ int i = 42;
+ double f = 1.1;
+ using ExpectT = std::tuple<int&, decltype(std::ignore)&, double&>;
+ auto res = std::tie(i, std::ignore, f);
+ static_assert(std::is_same<ExpectT, decltype(res)>::value, "");
+ assert(&std::get<0>(res) == &i);
+ assert(&std::get<1>(res) == &std::ignore);
+ assert(&std::get<2>(res) == &f);
+ // FIXME: If/when tuple gets constexpr assignment
+ //res = std::make_tuple(101, nullptr, -1.0);
+ }
+ return true;
+}
+#endif
+
int main()
{
{
@@ -39,5 +57,8 @@ int main()
static_assert ( std::get<0>(t) == 42, "" );
static_assert ( std::get<1>(t) == 1.1, "" );
}
+ {
+ static_assert(test_tie_constexpr(), "");
+ }
#endif
}
OpenPOWER on IntegriCloud