Ответ 1
Если у вас есть компилятор с поддержкой С++ 17, вы можете использовать apply
:
auto [tpl_h, tpl_t] = apply([](auto h, auto... t) {
return pair{tuple{h}, tuple{t...}};
}, tpl);
do_sth(tpl_h, tpl_t);
Поскольку вы используете VS2015.2, который поддерживает С++ 14 и более поздний черновик n4567, вы справедливо ограничено в доступной библиотечной поддержке. Однако вы можете использовать piecewise_construct
:
struct unpacker {
tuple<THead> tpl_h;
tuple<TTails...> tpl_t;
unpacker(THead h, TTails... t) : tpl_h{h}, tpl_t{t...} {}
};
auto unpacked = pair<unpacker, int>{piecewise_construct, tpl, tie()}.first;
do_sth(unpacked.tpl_h, unpacked.tpl_t);