I'd implement it similar to the one given at cppreference.com [1].

If this requires 10 overloads of `print`, that's OK. It's obvious how to adapt that implementation into something that c++11 could handle, i.e., delete all the overloads and introduce a single variadic function. Someone not familiar with the internals of Thrust is unlikely to know what a `cons` is.

[1] http://en.cppreference.com/w/cpp/utility/tuple/tuple_cat