[Bug c++/47475] New: Static member function template of class variadic template can't be called from the inside

flo.goujeon at orange dot fr gcc-bugzilla@gcc.gnu.org
Wed Jan 26 15:14:00 GMT 2011


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47475

           Summary: Static member function template of class variadic
                    template can't be called from the inside
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: flo.goujeon@orange.fr


GCC 4.5 and 4.6 can't compile the following piece of code, which seems valid:
****************************************
template<typename... Ts>
struct test;

template<>
struct test<>
{
    template<typename>
    static void f()
    {
    }
};

template<typename T, typename... Ts>
struct test<T, Ts...>
{
    template<typename U>
    static void f()
    {
        test<Ts...>::f<U>(); //compiler error here
    }
};
****************************************

Here is the compiler error message:
****************************************
|| /usr/local/bin/g++ -c main.cpp -W -Wall -pedantic -std=c++0x
|| main.cpp: In static member function ‘static void test<T, Ts ...>::f()’:
main.cpp|19 col 19| error: expected primary-expression before ‘>’ token
main.cpp|19 col 21| error: expected primary-expression before ‘)’ token
|| make: *** [main.o] Error 1
****************************************

However, GCC doesn't complain with this:
****************************************
int main()
{
    test<int, double>::f<int>();
}
****************************************



More information about the Gcc-bugs mailing list