#include <iostream>
#include <tuple>
#include <string>

template <class... ArgsL>
struct tuple_maker {
    typedef std::tuple<ArgsL...>    tuple_left;
    tuple_maker(tuple_left const & tl = tuple_left()): tuple_(tl) {}
    
    tuple_left  tuple_;
    
    template <class ArgR>
    tuple_maker<ArgsL..., ArgR> operator , (ArgR const & r)
    {
        return std::tuple_cat(tuple_, std::make_tuple(r));
    }
    
    operator tuple_left & () { return tuple_; }
};

tuple_maker<> tuple_of() { return tuple_maker<>(); }

int main()
{
    std::tuple<char, double, int>  mytup;
    mytup = (tuple_of(), 'a', 145.21, 100);
    return 0;
}