std::tuple(3) C++ Standard Libary std::tuple(3) NAME std::tuple - std::tuple Synopsis Defined in header <tuple> template< class... Types > (since C++11) class tuple; Class template std::tuple is a fixed-size collection of heterogeneous values. It is a generalization of std::pair. If std::is_trivially_destructible<Ti>::value is true for every Ti in Types, the destructor of std::tuple is trivial. If a program declares an explicit or partial specialization of std::tu- ple, the program is ill-formed, no diagnostic required. Template parameters Types... - the types of the elements that the tuple stores. Empty list is supported. Member functions constructor constructs a new tuple (public member function) operator= assigns the contents of one tuple to another (public member function) swap swaps the contents of two tuples (public member function) Non-member functions make_tuple creates a tuple object of the type defined by the argument (C++11) types (function template) tie creates a tuple of lvalue references or unpacks a tuple into (C++11) individual objects (function template) forward_as_tuple creates a tuple of forwarding references (C++11) (function template) tuple_cat creates a tuple by concatenating any number of tu- ples (C++11) (function template) get(std::tuple) tuple accesses specified element (C++11) (function template) operator== operator!= operator< operator<= operator> operator>= lexicographically compares the values in the tuple operator<=> (function template) (removed in C++20) (removed in C++20) (removed in C++20) (removed in C++20) (removed in C++20) (C++20) std::swap(std::tuple) specializes the std::swap algorithm (C++11) (function template) Helper concepts tuple-like specifies that a type implemented the tuple protocol pair-like (std::get, std::tuple_element, std::tuple_size) (C++23) (exposition-only concept*) Helper classes std::tuple_size<std::tuple> obtains the size of tuple at compile time (C++11) (class template specialization) std::tuple_element<std::tuple> obtains the type of the speci- fied element (C++11) (class template specialization) std::uses_allocator<std::tuple> specializes the std::uses_allo- cator type (C++11) trait (class template specialization) std::basic_common_reference<tuple-like> determines the common reference type of a (C++23) tuple and a tuple-like type (class template specialization) std::common_type<tuple-like> determines the common type of a tuple and a (C++23) tuple-like type (class template specialization) std::formatter<std::tuple> formatting support for tuple (C++23) (class template specialization) ignore placeholder to skip an element when (C++11) unpacking a tuple using tie (constant) Deduction guides (since C++17) Notes Since the "shape" of a tuple a its size, the types of its elements, and the ordering of those types a are part of its type signature, they must all be avail- able at compile time and can only depend on other compile-time information. This means that many conditional operations on tuples a in particular, conditional prepend/append and filter a are only possible if the conditions can be evaluated at compile time. For example, given a std::tuple<int, double, int>, it is possible to filter on types a e.g. returning a std::tuple<int, int> a but not to filter on whether or not each element is positive (which would have a different type signature depend- ing on runtime values of the tuple), unless all the elements were themselves constexpr. As a workaround, one can work with tuples of std::optional, but there is still no way to adjust the size based on runtime information. Until N4387 (applied as a defect report for C++11), a function could not return a tuple using copy-list-initialization: std::tuple<int, int> foo_tuple() { return {1, -1}; // Error until N4387 return std::tuple<int, int>{1, -1}; // Always works return std::make_tuple(1, -1); // Always works } Example // Run this code #include <iostream> #include <stdexcept> #include <string> #include <tuple> std::tuple<double, char, std::string> get_student(int id) { switch (id) { case 0: return {3.8, 'A', "Lisa Simpson"}; case 1: return {2.9, 'C', "Milhouse Van Houten"}; case 2: return {1.7, 'D', "Ralph Wiggum"}; case 3: return {0.6, 'F', "Bart Simpson"}; } throw std::invalid_argument("id"); } int main() { const auto student0 = get_student(0); std::cout << "ID: 0, " << "GPA: " << std::get<0>(student0) << ", " << "grade: " << std::get<1>(student0) << ", " << "name: " << std::get<2>(student0) << '\n'; const auto student1 = get_student(1); std::cout << "ID: 1, " << "GPA: " << std::get<double>(student1) << ", " << "grade: " << std::get<char>(student1) << ", " << "name: " << std::get<std::string>(student1) << '\n'; double gpa2; char grade2; std::string name2; std::tie(gpa2, grade2, name2) = get_student(2); std::cout << "ID: 2, " << "GPA: " << gpa2 << ", " << "grade: " << grade2 << ", " << "name: " << name2 << '\n'; // C++17 structured binding: const auto [gpa3, grade3, name3] = get_student(3); std::cout << "ID: 3, " << "GPA: " << gpa3 << ", " << "grade: " << grade3 << ", " << "name: " << name3 << '\n'; } Output: ID: 0, GPA: 3.8, grade: A, name: Lisa Simpson ID: 1, GPA: 2.9, grade: C, name: Milhouse Van Houten ID: 2, GPA: 1.7, grade: D, name: Ralph Wiggum ID: 3, GPA: 0.6, grade: F, name: Bart Simpson Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 2796 C++11 triviality of the destructor of specified std::tuple was unspecified the program is ill-formed LWG 3990 C++11 a program could declare an explicit or in this partial specialization of std::tuple case (no di- agnostic required) References * C++23 standard (ISO/IEC 14882:2023): * 22.4 Tuples [tuple] * C++20 standard (ISO/IEC 14882:2020): * 20.5 Tuples [tuple] * C++17 standard (ISO/IEC 14882:2017): * 23.5 Tuples [tuple] * C++14 standard (ISO/IEC 14882:2014): * 20.4 Tuples [tuple] * C++11 standard (ISO/IEC 14882:2011): * 20.4 Tuples [tuple] See also pair implements binary tuple, i.e. a pair of values (class template) http://cppreference.com 2024.06.10 std::tuple(3)
NAME | Synopsis | Template parameters | Member functions | Non-member functions | Helper classes | Notes | Example | Output: | References | See also
Want to link to this manual page? Use this URL:
<https://man.FreeBSD.org/cgi/man.cgi?query=std::tuple&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>