15839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//===----------------------------------------------------------------------===//
25839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//
35839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//                     The LLVM Compiler Infrastructure
45839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//
55839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open
65839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier// Source Licenses. See LICENSE.TXT for details.
75839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//
85839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//===----------------------------------------------------------------------===//
95839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier
105839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier// UNSUPPORTED: c++98, c++03
115839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier
125839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier// <tuple>
135839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier
145839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier// template <class... Types>
155839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//   class tuple_size<tuple<Types...>>
165839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier//     : public integral_constant<size_t, sizeof...(Types)> { };
175839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier
185839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier// Expect failures with a reference type, pointer type, and a non-tuple type.
195839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier
205839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier#include <tuple>
215839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier
225839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselierint main()
235839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier{
24408438494ba3628b07e8e63216367e8343cc1e98Eric Fiselier    (void)std::tuple_size<std::tuple<> &>::value; // expected-error {{implicit instantiation of undefined template}}
25408438494ba3628b07e8e63216367e8343cc1e98Eric Fiselier    (void)std::tuple_size<int>::value; // expected-error {{implicit instantiation of undefined template}}
26408438494ba3628b07e8e63216367e8343cc1e98Eric Fiselier    (void)std::tuple_size<std::tuple<>*>::value; // expected-error {{implicit instantiation of undefined template}}
275839fedf289f656cc6819a775a0328b643dc7c6bEric Fiselier}
28