#include template class Foo { T data; public: Foo(const T &value) : data(value) { } T get() const { return data; } }; template std::ostream & operator<<(std::ostream &os, const Foo &f) { return os << f.get(); }