#include <iostream>
#include <tuple>
#if 1 // Not in C++11 // make_index_sequence
#include <cstdint>
template <std::size_t...> struct index_sequence {};
template <std::size_t N, std::size_t... Is>
struct make_index_sequence : make_index_sequence<N - 1, N - 1, Is...> {};
template <std::size_t... Is>
struct make_index_sequence<0u, Is...> : index_sequence<Is...> {};
#endif // make_index_sequence
namespace detail
{
template <typename Tuple, typename T, std::size_t...Is>
Tuple output(const Tuple& t, const T& x, index_sequence<Is...>)
{
return Tuple{(std::get<Is>(t) << x)...};
}
}
template <typename ...Args, typename T>
std::tuple<Args&...> operator<<(const std::tuple<Args&...>& t, const T& x)
{
return detail::output(t, x, make_index_sequence<sizeof...(Args)>());
}
int main()
{
std::tie(std::cout, std::cout) << "Foo" << "Bar";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CgojaWYgMSAvLyBOb3QgaW4gQysrMTEgLy8gbWFrZV9pbmRleF9zZXF1ZW5jZQojaW5jbHVkZSA8Y3N0ZGludD4KCnRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLj4gc3RydWN0IGluZGV4X3NlcXVlbmNlIHt9OwoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4sIHN0ZDo6c2l6ZV90Li4uIElzPgpzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZSA6IG1ha2VfaW5kZXhfc2VxdWVuY2U8TiAtIDEsIE4gLSAxLCBJcy4uLj4ge307Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CnN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlPDB1LCBJcy4uLj4gOiBpbmRleF9zZXF1ZW5jZTxJcy4uLj4ge307CgojZW5kaWYgLy8gbWFrZV9pbmRleF9zZXF1ZW5jZQoKbmFtZXNwYWNlIGRldGFpbAp7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFR1cGxlLCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdC4uLklzPgogICAgVHVwbGUgb3V0cHV0KGNvbnN0IFR1cGxlJiB0LCBjb25zdCBUJiB4LCBpbmRleF9zZXF1ZW5jZTxJcy4uLj4pCiAgICB7CiAgICAgICAgcmV0dXJuIFR1cGxleyhzdGQ6OmdldDxJcz4odCkgPDwgeCkuLi59OwogICAgfQp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncywgdHlwZW5hbWUgVD4Kc3RkOjp0dXBsZTxBcmdzJi4uLj4gb3BlcmF0b3I8PChjb25zdCBzdGQ6OnR1cGxlPEFyZ3MmLi4uPiYgdCwgY29uc3QgVCYgeCkKewogICAgcmV0dXJuIGRldGFpbDo6b3V0cHV0KHQsIHgsIG1ha2VfaW5kZXhfc2VxdWVuY2U8c2l6ZW9mLi4uKEFyZ3MpPigpKTsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnRpZShzdGQ6OmNvdXQsIHN0ZDo6Y291dCkgPDwgIkZvbyIgPDwgIkJhciI7CiAgICByZXR1cm4gMDsKfQo=