1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
   | #include <iostream> #include <tuple> #include <utility> #include <array> int add(int first, int second) { return first + second; }
  template<typename T> T add_generic(T first, T second) { return first + second; }
  auto add_lambda = [](auto first, auto second) { return first + second; };
  template<typename... Ts> std::ostream& operator<<(std::ostream& os, std::tuple<Ts...> const& theTuple) {     std::apply     (         [&os](Ts const&... tupleArgs)         {             os << '[';             std::size_t n{ 0 };             ((os << tupleArgs << (++n != sizeof...(Ts) ? ", " : "")), ...);             os << ']';         }, theTuple     );     return os; }
  std::string mergestr(const std::string& a, const std::string& b) {     return  a + b; }
 
 
 
  int main() {     std::array<std::string, 2> arr;     arr[0] = "00";     arr[1] = "11";          std::cout << std::apply(mergestr, std::pair("aaa", "bbb")) << '\n';          std::cout << std::apply(mergestr, arr) << '\n';          std::cout << std::apply(add, std::pair(1L, 2L)) << '\n';                    std::cout << std::apply(add_generic<float>, std::make_pair(2.0f, 3.0f)) << '\n';           std::cout << std::apply(add_lambda, std::pair(3.3f, 4.4f)) << '\n';          std::cout << std::apply(add_lambda, std::tuple(4.4f, 5.5f)) << '\n';               std::tuple<int, const char*, float, char> tuple1(1, "tuple1", 1.1f, '1');     std::tuple tuple2(2, "tuple2", 2.2f, '2'); 
      std::cout << tuple1 << '\n';     std::cout << tuple2 << '\n';
      auto tuple3 = std::make_tuple(3, "tuple3", 3.3f, '3');     struct Foo {         Foo(int first, const char* second, float third, char fourth) {             std::cout << first << ", " << second << ", " << third << ", " << fourth << "\n";         }     };     auto f = std::make_from_tuple<Foo>(std::move(tuple3));     return 0; }
   |