8
votes

I am wondering if std::endl works with both std::cout and std::wcout?

Anyone is clear on this?

1
How about writing the code to test it ?asheeshr
I assume he means to ask if there is anything wrong with him using endl with wcout.ctor
I added some more detail explaining how manipulators work.Kerrek SB

1 Answers

13
votes

Yes. In fact, std::endl a function template that will work as a manipulator on any specialization of the std::basic_ostream template.


Some more detail: 27.7.3.6 prescribes that the std::basic_ostream template contain overload for operator<< as follows:

basic_ostream<charT, traits> &
operator<<(basic_ostream<charT, traits> (*pf)(basic_ostream<charT, traits> &));

The effect of invoking this overload on a suitable function is return pf(*this). So when you say std::cout << std::endl, this actually becomes std::endl(std::cout) and returns a reference to the stream object.

All other ostream manipulators are written in the same way, and similarly for input manipulators.


The magic of the endl function template is a call to widen('\n'), which produces the correct "newline" data for the given character type.