This is the mail archive of the gcc-bugs@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]

c++/10146: [3.4 regression] [new parser] template function lookup failure(s)


>Number:         10146
>Category:       c++
>Synopsis:       [3.4 regression] [new parser] template function lookup failure(s)
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 19 08:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Richard Guenther
>Release:        g++-3.4 (GCC) 3.4 20030313 (experimental)
>Organization:
>Environment:

>Description:
In the following testcase the marked lines fail/work even if they should/should not (the former being the problem for me). One should carefuly check the standard if any of the working one should be rejected.

The error message from compiling the testcase is

bellatrix:~/src/tests$ g++-3.4 -c temp.cpp 
temp.cpp: In member function `void Bar<T>::operator()(const U&) [with U = int, 
   T = char]':
temp.cpp:32:   instantiated from here
temp.cpp:14: error: no matching function for call to `Foo<int>::foo(const int&)
   '
temp.cpp:15: error: no matching function for call to `Foo<int>::foo(const int&)
   '
temp.cpp:16: error: no matching function for call to `Foo<int>::foo(const int&)
   '
temp.cpp:32:   instantiated from here
temp.cpp:18: error: no matching function for call to `Foo<int>::bar(const int&)
   '
temp.cpp:19: error: no matching function for call to `Foo<int>::bar(const int&)
   '


Testcase:

template <class T>
struct Foo {
        template <class U>
        static void foo(const U&);
        template <class U>
        void bar(const U&);
};

template <class T>
struct Bar {
        template <class U>
        void operator()(const U&u)
        {
                Foo<int>().foo<U>(u);          // does not work (ok)
                Foo<int>::foo<U>(u);           // does not work (ok)
                Foo<int>().template foo<U>(u); // does not work
                Foo<int>::template foo<U>(u);  // does work
                Foo<int>().bar<U>(u);          // does not work (ok)
                Foo<int>().template bar<U>(u); // does not work
                Foo<int>().foo(u);             // does work ??
                Foo<int>::foo(u);              // does work ??
                Foo<int>().template foo(u);    // does work
                Foo<int>::template foo(u);     // does work
                Foo<int>().bar(u);             // does work ??
                Foo<int>().template bar(u);    // does work
        }
};

void foo()
{
        int i;
        Bar<char>()(i);
}
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


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