Mark Mitchell <[EMAIL PROTECTED]> writes: > Let's start with the simpler friend10.C. There, the "operator bool()" > conversion operator is irrelevant, as far as I can see. However, we > *should* still call the friend operator<<, because argument-dependent > lookup is explicitly defined that way. > > So, in that particular form of lookup, you should ignore > DECL_ANTICIPATED -- but only if the friend was declared in one of the > classes that's in the set of special classes. I guess, without changing > our representation, you get to go through each of the DECL_ANTICIPATED > friends, and then call is_friend (fn, c) for each c in the set of > argument-dependent classes. That's wort-case quadratic, and we could > make it cleverer, but I'd start with that.
Thanks for the analysis. Naturally, addressing that issue caused another problem, namely g++.old-deja/g++.jason/scoping15.C. Because the call to imag in that test case is written ::imag, the parser does not do argument dependent lookup to find the function. So the compiler looks for a top-level declaration for ::imag, and doesn't find one. So, if we only do argument dependent lookup for unqualified names, and we only find otherwise-undeclared friend functions using argument dependent lookup, then is scoping15.C correct C++ or not? Thanks for any insight on this one. Ian