Hi, I've wrapped a variant<double,bool> into a tuple. Unpacking the tuple works as far I can see. I want to print the tuple for doubles with one pretty print functor and for booleans with another functor (not shown here). Anyway, variant_print takes a long argument list as the error message shows. How can I pass it convinient? I guess, inside the variant_print I have to use the vistor to dispatch the print functors, isn't? BTW, fusion could be used? On debian/linux 1.35 is not released yet, so I use 1.34.1. Thanks, Olaf ---8<--- #include <boost/variant.hpp> #include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <iostream> struct pretty_print { pretty_print( double d ) : m_d( d ) { } std::ostream& print_on( std::ostream& os ) const { os << m_d; return os; } double m_d; }; std::ostream& operator<<( std::ostream& os, const pretty_print& p ) { return p.print_on( os ); } struct variant_print { // ????????? variant_print(::boost::variant<double, bool>& v) { } }; using namespace std; using namespace boost::tuples; using namespace boost; int main() { typedef variant<double, bool> double_variant; typedef tuple<double_variant> double_tuple; double_tuple v1; double_tuple v2; get<0>( v1 ) = 3.14; get<0>( v2 ) = true; // This works cout << pretty_print( get<double>( get<0>( v1 ) ) ) << endl; // This not cout << variant_print( get<0>( v1 ) ) << endl; } --->8--- $ LANG=en g++ -Wall tuple.cpp -o tuple && ./tuple tuple.cpp: In function 'int main()': tuple.cpp:55: error: no match for 'operator<<' in 'std::cout << variant_print(((boost::variant<double, bool, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>&)((boost::variant<double, bool, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>*)boost::tuples::get [with int N = 0, HT = boost::variant<double, bool, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, TT = boost::tuples::null_type](((boost::tuples::cons<boost::variant<double, bool, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, boost::tuples::null_type>&)(& v1.boost::tuples::tuple<boost::variant<double, bool, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>::<anonymous>))))))' ...