N3670 Wording for Addressing Tuples by Type: Revision 2
C++11のstd::tuple
には、std::get<N>(t)
のようにして、インデックス指定でN番目の型の値を取得する関数がありました。
C++14では、std::get<T>(t)
のようにして、tuple
オブジェクトから指定した型の値を取得する関数が追加されます。
// <tuple> namespace std { 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; }
<utility>
にも、std::pair
に関するオーバーロードが追加されます。
tuple
に含まれない型を指定した場合は、コンパイルエラーになります。
#include <tuple> int main() { std::tuple<int, char, double> t(1, 'a', 3.14); int& x = std::get<int>(t); // x == 1 }
std::tuple<int, double, double> t;
に対するget<double>(t);
のように、型が一意に決まらない場合はコンパイルエラーになるそうです。