Michael Kilburn <crusader.mike@[EMAIL PROTECTED]
> writes:
> Can someone explain this peculiar behavior of MSVC & GCC:
Yes.
NB: Your question isn't related to argument dependant (aka Koenig)
lookup. It's a basic overloading problem (if these exist at all).
> code below, if you uncomment that line (which is totally unrelated to
> 'dph' class), will stop compiling with usual bizzare C++ error
It's unrelated to struct dph, but it's related to that type's
operator<<().
> [code]
> #include <iostream>
>
> namespace AAA {
> struct gad
> {
> };
>
> //std::ostream& operator<<(std::ostream& s, gad const&);
>
> struct dph
> {
> void f();
> };
>
> }
>
> std::ostream& operator<<(std::ostream& s, AAA::dph const&)
> {
> return s;
> }
>
> void AAA::dph::f()
> {
> std::cout << *this;
This statement causes the compiler to look for operator<<()s in a
sequence of scopes.
The first scope considered is the struct dph, which doesn't have an
operator<<() member.
The next scope considered is namespace AAA, where an operator<<()
declaration is found.
The compiler then determines that the parameters required by
AAA::operator<<() don't match those you intend to pass.
No further scope is then considered.
The obvious fix is to move the other operator<<() into namespace AAA.
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|