Files
2025-10-25 03:02:53 +03:00

3.6 KiB

[tuple.elem]

22 General utilities library [utilities]

22.4 Tuples [tuple]

22.4.8 Element access [tuple.elem]

🔗

template<size_t I, class... Types> constexpr tuple_element_t<I, tuple<Types...>>& get(tuple<Types...>& t) noexcept; template<size_t I, class... Types> constexpr tuple_element_t<I, tuple<Types...>>&& get(tuple<Types...>&& t) noexcept; // #1 template<size_t I, class... Types> constexpr const tuple_element_t<I, tuple<Types...>>& get(const tuple<Types...>& t) noexcept; // #2 template<size_t I, class... Types> constexpr const tuple_element_t<I, tuple<Types...>>&& get(const tuple<Types...>&& t) noexcept;

1

#

Mandates: I < sizeof...(Types).

2

#

Returns: A reference to the Ith element of t, where indexing is zero-based.

3

#

[Note 1:

For the overload marked #1, if a type T in Types is some reference type X&, the return type is X&, not X&&.

However, if the element type is a non-reference type T, the return type is T&&.

— end note]

4

#

[Note 2:

Constness is shallow.

For the overload marked #2, if a type T in Types is some reference type X&, the return type is X&, not const X&.

However, if the element type is a non-reference type T, the return type is const T&.

This is consistent with how constness is defined to work for non-static data members of reference type.

— end note]

🔗

template<class T, class... Types> constexpr T& get(tuple<Types...>& t) noexcept; template<class T, class... Types> constexpr T&& get(tuple<Types...>&& t) noexcept; template<class T, class... Types> constexpr const T& get(const tuple<Types...>& t) noexcept; template<class T, class... Types> constexpr const T&& get(const tuple<Types...>&& t) noexcept;

5

#

Mandates: The type T occurs exactly once in Types.

6

#

Returns: A reference to the element of t corresponding to the typeT in Types.

7

#

[Example 1: const tuple<int, const int, double, double> t(1, 2, 3.4, 5.6);const int& i1 = get(t); // OK, i1 has value 1const int& i2 = get(t); // OK, i2 has value 2const double& d = get(t); // error: type double is not unique within t — end example]

8

#

[Note 3:

The reason get is a non-member function is that if this functionality had been provided as a member function, code where the type depended on a template parameter would have required using the template keyword.

— end note]