This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ADL Help


Hi,

This is not GCC or G++ specific.  I tried posting this to some forums
but did not get any help.  I hope you will tolerate the question:

This program compiles and runs. The "here 2" version of f is found:

#include <iostream>

struct NS {
    struct T {
        static void f(T)
        {
            std::cout << "here 1" << std::endl;
        }
    };

    static void f(T)
    {
        std::cout << "here 2" << std::endl;
    }
};

NS::T parm;

int main() {
    NS::f(parm);
    return 0;
}

If the NS::f(parm) is changed to just f(parm), then f is not found.

But if the struct NS is changed to namespace NS, then it is found again.

I am looking at this particular web page to try and understand how ADL works:

http://www.kuzbass.ru:8086/docs/isocpp/basic.html#basic.lookup.koenig

There are several pages just like it.  In particular this bullet would
seem to apply but it must not for some reason:

| If T is a class type, its associated classes are the class itself and
| its direct and indirect base classes. Its associated namespaces are
| the namespaces in which its associated classes are defined.

It seems like the "here 1" version would be found but it is not.  Can
you help me to understand what I'm missing?

Thank you very much,
Perry Smith
Ease Software, Inc.
pedz@easesoftware.com
http://www.easesoftware.com

SATA Products for IBMs RS/6000, pSeries, and AIX systems


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]