overloading "<<" with a struct (no class) cout style

c++, operator-overloading, stl

Solution

Perhaps it's a copy-paste error, but there are just a few things wrong. Firstly, free-functions cannot be `const`, yet you have marked `dump` as such. The second error is that `dump` does not return a value, which is also easily remedied. Fix those and it should work:

template <typename T> // note, might as well take p as const-reference
std::ostream& dump(std::ostream &o, const point<T>& p)
{
    return o << "x: " << p.x << "\ty: " << p.y << std::endl;
}

Problem

I have a struct that I'd like to output using either 'std::cout' or some other output stream. Is this possible without using classes? Thanks ``` #include <iostream> #include <fstream> template <typename T> struct point{ T x; T y; }; template <typename T> std::ostream& dump(std::ostream &o,point<T> p) const{ o<<"x: " << p.x <<"\ty: " << p.y <<std::endl; } template<typename T> std::ostream& operator << (std::ostream &o,const point<T> &a){ return dump(o,a); } int main(){ point<double> p; p.x=0.1; p.y=0.3; dump(std::cout,p); std::cout << p ;//how? return 0; } ``` I tried different syntax' but I cant seem to make it work.

Original source