#include <iostream>
#include <tuple>
template <typename NewElem, typename... TupleElem>
std::tuple<TupleElem..., NewElem> tuple_append(const std::tuple<TupleElem...> &tup, const NewElem &el) {
return std::tuple_cat(tup, std::make_tuple(el));
}
int main()
{
auto t = std::make_tuple(1, 2.0, 'a');
auto t2 = tuple_append(t, false);
std::cout << std::boolalpha;
std::cout << std::get<0>(t2) << '\n';
std::cout << std::get<1>(t2) << '\n';
std::cout << std::get<2>(t2) << '\n';
std::cout << std::get<3>(t2) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgTmV3RWxlbSwgdHlwZW5hbWUuLi4gVHVwbGVFbGVtPgpzdGQ6OnR1cGxlPFR1cGxlRWxlbS4uLiwgTmV3RWxlbT4gdHVwbGVfYXBwZW5kKGNvbnN0IHN0ZDo6dHVwbGU8VHVwbGVFbGVtLi4uPiAmdHVwLCBjb25zdCBOZXdFbGVtICZlbCkgewogICAgcmV0dXJuIHN0ZDo6dHVwbGVfY2F0KHR1cCwgc3RkOjptYWtlX3R1cGxlKGVsKSk7Cn0KCmludCBtYWluKCkKewogICAgYXV0byB0ID0gc3RkOjptYWtlX3R1cGxlKDEsIDIuMCwgJ2EnKTsKICAgIGF1dG8gdDIgPSB0dXBsZV9hcHBlbmQodCwgZmFsc2UpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6Z2V0PDA+KHQyKSA8PCAnXG4nOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6Z2V0PDE+KHQyKSA8PCAnXG4nOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6Z2V0PDI+KHQyKSA8PCAnXG4nOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6Z2V0PDM+KHQyKSA8PCAnXG4nOwp9