Dear list, In the manual of boost::variant: OutputStreamable: For any object t of type T, std::cout << t must be a valid expression. However, I can not output a variant vector work by defining ostream& operator<< vector<double> . Attached is a test case. Note that variant int, string can be outputed, but not the vector. Yet, cout << vector<double> is working. I am using gcc 3.2.2 on linux redhat 9. Many thanks in advance. Bo #include "boost/variant.hpp" using namespace std; #include <string> #include <vector> typedef boost::variant<int, double, string, vector<double> > Variable; #include <iostream> ostream& operator<< (ostream& out, const vector<double> & vec) { out<< "["; if( ! vec.empty() ) { vector<double>::const_iterator it = vec.begin(); out << *it; for( ++it; it!= vec.end(); ++it) out << ", " << *it ; } out << "]"; return out; } int main() { Variable a(2); Variable b("asd"); vector<double> vec(0); vec.push_back(3.0); Variable c(vec); cout << vec << endl; // OK cout << a << b << endl; // OK cout << c << endl; // compiling errors. return 0; }