c++/8567: std::endl is of unknown type when overloading operator<< (repeat in case attachment didnt work)
bangerth@dealii.org
bangerth@dealii.org
Thu Nov 21 04:17:00 GMT 2002
Synopsis: std::endl is of unknown type when overloading operator<< (repeat in case attachment didnt work)
State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Thu Nov 14 15:37:17 2002
State-Changed-Why:
Not a bug. Basically, it is this:
---------------------------------
namespace std {
template <typename T> T& endl (T&);
};
class BlackHole{};
template <typename T> BlackHole& operator<<(BlackHole& bh, const T& dummy);
template <typename T> BlackHole& operator<<(BlackHole& bh, T& (*dummy)(T&));
int main() {
BlackHole bh;
bh << std::endl;
}
-------------------------------
Since there is no unambiguous function std::endl, the
compiler cannot know which one to take as argument, so
you have to disambiguate the situation by passing it the
exact template argument list. Alternatively, you can give
an overloaded non-template op<<; in this example, this
would do:
BlackHole& operator<<(BlackHole& bh, int& (*dummy)(int&));
Then std::endl<int> would be taken.
W.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8567
More information about the Gcc-prs
mailing list