make_tuple.pass.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is dual licensed under the MIT and the University of Illinois Open
  6. // Source Licenses. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <tuple>
  10. // template <class... Types> class tuple;
  11. // template<class... Types>
  12. // tuple<VTypes...> make_tuple(Types&&... t);
  13. // UNSUPPORTED: c++98, c++03
  14. #include <tuple>
  15. #include <functional>
  16. #include <cassert>
  17. #include "test_macros.h"
  18. int main()
  19. {
  20. {
  21. int i = 0;
  22. float j = 0;
  23. std::tuple<int, int&, float&> t = std::make_tuple(1, std::ref(i),
  24. std::ref(j));
  25. assert(std::get<0>(t) == 1);
  26. assert(std::get<1>(t) == 0);
  27. assert(std::get<2>(t) == 0);
  28. i = 2;
  29. j = 3.5;
  30. assert(std::get<0>(t) == 1);
  31. assert(std::get<1>(t) == 2);
  32. assert(std::get<2>(t) == 3.5);
  33. std::get<1>(t) = 0;
  34. std::get<2>(t) = 0;
  35. assert(i == 0);
  36. assert(j == 0);
  37. }
  38. #if TEST_STD_VER > 11
  39. {
  40. constexpr auto t1 = std::make_tuple(0, 1, 3.14);
  41. constexpr int i1 = std::get<1>(t1);
  42. constexpr double d1 = std::get<2>(t1);
  43. static_assert (i1 == 1, "" );
  44. static_assert (d1 == 3.14, "" );
  45. }
  46. #endif
  47. }