summaryrefslogtreecommitdiff
path: root/test/std/utilities/tuple/tuple.tuple
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-04 22:11:41 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-04 22:11:41 +0000
commitcb08bb04c85c6dcd3d951725505317c31eeff323 (patch)
treeaffc3d589de957aeb81a9ba2d0849e2bddde7861 /test/std/utilities/tuple/tuple.tuple
parent53a420fba21cf1644972b34dcd811a43cdb8368d (diff)
Notes
Diffstat (limited to 'test/std/utilities/tuple/tuple.tuple')
-rw-r--r--test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.fail.cpp6
-rw-r--r--test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.pass.cpp32
-rw-r--r--test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_v.fail.cpp2
3 files changed, 16 insertions, 24 deletions
diff --git a/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.fail.cpp b/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.fail.cpp
index 50c6f17efbef..3f132e47b626 100644
--- a/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.fail.cpp
+++ b/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.fail.cpp
@@ -21,7 +21,7 @@
int main()
{
- (void)std::tuple_size<std::tuple<> &>::value; // expected-error {{no member named 'value'}}
- (void)std::tuple_size<int>::value; // expected-error {{no member named 'value'}}
- (void)std::tuple_size<std::tuple<>*>::value; // expected-error {{no member named 'value'}}
+ (void)std::tuple_size<std::tuple<> &>::value; // expected-error {{implicit instantiation of undefined template}}
+ (void)std::tuple_size<int>::value; // expected-error {{implicit instantiation of undefined template}}
+ (void)std::tuple_size<std::tuple<>*>::value; // expected-error {{implicit instantiation of undefined template}}
}
diff --git a/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.pass.cpp b/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.pass.cpp
index 40214f632e75..3e4145c79cb5 100644
--- a/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.pass.cpp
+++ b/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.pass.cpp
@@ -18,8 +18,6 @@
// UNSUPPORTED: c++98, c++03
#include <tuple>
-#include <utility>
-#include <array>
#include <type_traits>
template <class T, class = decltype(std::tuple_size<T>::value)>
@@ -27,27 +25,29 @@ constexpr bool has_value(int) { return true; }
template <class> constexpr bool has_value(long) { return false; }
template <class T> constexpr bool has_value() { return has_value<T>(0); }
+struct Dummy {};
template <class T, std::size_t N>
void test()
{
- static_assert(has_value<T>(), "");
static_assert((std::is_base_of<std::integral_constant<std::size_t, N>,
std::tuple_size<T> >::value), "");
- static_assert(has_value<const T>(), "");
static_assert((std::is_base_of<std::integral_constant<std::size_t, N>,
std::tuple_size<const T> >::value), "");
- static_assert(has_value<volatile T>(), "");
static_assert((std::is_base_of<std::integral_constant<std::size_t, N>,
std::tuple_size<volatile T> >::value), "");
-
- static_assert(has_value<const volatile T>(), "");
static_assert((std::is_base_of<std::integral_constant<std::size_t, N>,
std::tuple_size<const volatile T> >::value), "");
- {
- static_assert(!has_value<T &>(), "");
- static_assert(!has_value<T *>(), "");
- }
+}
+
+void test_tuple_size_value_sfinae() {
+ // Test that the ::value member does not exist
+ static_assert(has_value<std::tuple<int> const>(), "");
+ static_assert(has_value<std::pair<int, long> volatile>(), "");
+ static_assert(!has_value<int>(), "");
+ static_assert(!has_value<const int>(), "");
+ static_assert(!has_value<volatile void>(), "");
+ static_assert(!has_value<const volatile std::tuple<int>&>(), "");
}
int main()
@@ -56,13 +56,5 @@ int main()
test<std::tuple<int>, 1>();
test<std::tuple<char, int>, 2>();
test<std::tuple<char, char*, int>, 3>();
- test<std::pair<int, void*>, 2>();
- test<std::array<int, 42>, 42>();
- {
- static_assert(!has_value<void>(), "");
- static_assert(!has_value<void*>(), "");
- static_assert(!has_value<int>(), "");
- static_assert(!has_value<std::pair<int, int>*>(), "");
- static_assert(!has_value<std::array<int, 42>&>(), "");
- }
+ test_tuple_size_value_sfinae();
}
diff --git a/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_v.fail.cpp b/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_v.fail.cpp
index 700dd95c959c..957a683b47f8 100644
--- a/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_v.fail.cpp
+++ b/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_v.fail.cpp
@@ -22,5 +22,5 @@ int main()
(void)std::tuple_size_v<std::tuple<> &>; // expected-note {{requested here}}
(void)std::tuple_size_v<int>; // expected-note {{requested here}}
(void)std::tuple_size_v<std::tuple<>*>; // expected-note {{requested here}}
- // expected-error@tuple:* 3 {{no member named 'value'}}
+ // expected-error@tuple:* 3 {{implicit instantiation of undefined template}}
}