http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51183
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-12-05 16:06:57 UTC --- Nice! it should be pretty simple: template<class... _Args1, class... _Args2> pair(piecewise_construct_t, tuple<_Args1...> __first, tuple<_Args2...> __second) : pair(std::move(__first), std::move(__second), typename _Build_index_tuple<sizeof...(_Args1)>::__type(), typename _Build_index_tuple<sizeof...(_Args2)>::__type()) { } template<typename... _Args2, std::size_t... _Indexes1, typename... _Args2, std::size_t... _Indexes2> explicit pair(tuple<_Args1...> __tuple1, tuple<_Args2> __tuple2, _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) : first(std::forward<_Args1>(get<_Indexes1>(__tuple1))...), second(std::forward<_Args2>(get<_Indexes2>(__tuple2))...) { }