15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <tuple>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // template <class... Types> class tuple;
125a83710eSEric Fiselier
135a83710eSEric Fiselier // template<class... Types>
145a83710eSEric Fiselier // tuple<VTypes...> make_tuple(Types&&... t);
155a83710eSEric Fiselier
1631cbe0f2SLouis Dionne // UNSUPPORTED: c++03
170a52cd79SEric Fiselier
185a83710eSEric Fiselier #include <tuple>
195a83710eSEric Fiselier #include <functional>
205a83710eSEric Fiselier #include <cassert>
215a83710eSEric Fiselier
220f901c7eSStephan T. Lavavej #include "test_macros.h"
230f901c7eSStephan T. Lavavej
24*06e2b737SArthur O'Dwyer TEST_CONSTEXPR_CXX20
test()25*06e2b737SArthur O'Dwyer bool test()
265a83710eSEric Fiselier {
275a83710eSEric Fiselier int i = 0;
285a83710eSEric Fiselier float j = 0;
29*06e2b737SArthur O'Dwyer std::tuple<int, int&, float&> t =
30*06e2b737SArthur O'Dwyer std::make_tuple(1, std::ref(i), std::ref(j));
315a83710eSEric Fiselier assert(std::get<0>(t) == 1);
325a83710eSEric Fiselier assert(std::get<1>(t) == 0);
335a83710eSEric Fiselier assert(std::get<2>(t) == 0);
345a83710eSEric Fiselier i = 2;
355a83710eSEric Fiselier j = 3.5;
365a83710eSEric Fiselier assert(std::get<0>(t) == 1);
375a83710eSEric Fiselier assert(std::get<1>(t) == 2);
385a83710eSEric Fiselier assert(std::get<2>(t) == 3.5);
395a83710eSEric Fiselier std::get<1>(t) = 0;
405a83710eSEric Fiselier std::get<2>(t) = 0;
415a83710eSEric Fiselier assert(i == 0);
425a83710eSEric Fiselier assert(j == 0);
43*06e2b737SArthur O'Dwyer
44*06e2b737SArthur O'Dwyer return true;
455a83710eSEric Fiselier }
46*06e2b737SArthur O'Dwyer
main(int,char **)47*06e2b737SArthur O'Dwyer int main(int, char**)
48*06e2b737SArthur O'Dwyer {
49*06e2b737SArthur O'Dwyer test();
50*06e2b737SArthur O'Dwyer #if TEST_STD_VER >= 20
51*06e2b737SArthur O'Dwyer static_assert(test());
52*06e2b737SArthur O'Dwyer #endif
53*06e2b737SArthur O'Dwyer
540f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
555a83710eSEric Fiselier {
565a83710eSEric Fiselier constexpr auto t1 = std::make_tuple(0, 1, 3.14);
575a83710eSEric Fiselier constexpr int i1 = std::get<1>(t1);
585a83710eSEric Fiselier constexpr double d1 = std::get<2>(t1);
595a83710eSEric Fiselier static_assert (i1 == 1, "" );
605a83710eSEric Fiselier static_assert (d1 == 3.14, "" );
615a83710eSEric Fiselier }
625a83710eSEric Fiselier #endif
632df59c50SJF Bastien
642df59c50SJF Bastien return 0;
655a83710eSEric Fiselier }
66