summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-07-02 03:46:08 +0000
committerEric Fiselier <eric@efcs.ca>2016-07-02 03:46:08 +0000
commit4f905b8daaf9826b91abe30fe8b5c5cd1ee7caa9 (patch)
tree57a1f484ed7483850c9717eb7bd41980f81bba4d
parent91ea3fb698bc33c2a7e6537d461333fe02000bfa (diff)
downloadbcm5719-llvm-4f905b8daaf9826b91abe30fe8b5c5cd1ee7caa9.tar.gz
bcm5719-llvm-4f905b8daaf9826b91abe30fe8b5c5cd1ee7caa9.zip
Handle std::get<T>(...) for std::tuple<>
llvm-svn: 274422
-rw-r--r--libcxx/include/tuple5
-rw-r--r--libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type.fail.cpp3
2 files changed, 8 insertions, 0 deletions
diff --git a/libcxx/include/tuple b/libcxx/include/tuple
index 32f43805ff7..b0ab1c930b7 100644
--- a/libcxx/include/tuple
+++ b/libcxx/include/tuple
@@ -1013,6 +1013,11 @@ struct __find_exactly_one_checked {
static_assert(value != __ambiguous,"type occurs more than once in type list");
};
+template <class _T1>
+struct __find_exactly_one_checked<_T1> {
+ static_assert(!is_same<_T1, _T1>::value, "type not in empty type list");
+};
+
} // namespace __find_detail;
template <typename _T1, typename... _Args>
diff --git a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type.fail.cpp b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type.fail.cpp
index 6375b77cd4a..74e6efd983b 100644
--- a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type.fail.cpp
+++ b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type.fail.cpp
@@ -20,6 +20,9 @@ void test_bad_index() {
(void)std::get<long>(t1); // expected-note {{requested here}}
(void)std::get<char>(t1); // expected-note {{requested here}}
// expected-error@tuple:* 2 {{type occurs more than once}}
+ std::tuple<> t0;
+ (void)std::get<char*>(t0); // expected-node {{requested here}}
+ // expected-error@tuple:* 1 {{type not in empty type list}}
}
void test_bad_return_type() {
OpenPOWER on IntegriCloud