#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;
}
