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

            Bug ID: 58495
           Summary: member function template all  of class template yield
                    'expected primary-expression'
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: imzhuli at vip dot qq.com

Created attachment 30878
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30878&action=edit
test case.

pls refer to the attachment (or the following code)
line 27 will cause an error(expected primary-expression), but line 24 & line 33
created object of same class and is able to call the member function template. 
Further more, if the f() is deducable, the call is allowed.

// example define: 

template<typename T>void f(T t); 

// call: (instead of line 27)

xFromB.f(123) ; // ok.

// end of example


 1 #include <iostream>
  2 #include <string>
  3 
  4 using namespace std;
  5 
  6 
  7 template<typename A>
  8 struct X
  9 {
 10   template<typename T>
 11     void f()
 12     {
 13       cout << "F" << endl;
 14     }
 15 };
 16 
 17 template<template<typename A> class B>
 18 struct Y
 19 {
 20   B<int> xFromB;
 21 
 22   void g()
 23   {
 24     X<int> directX;
 25     directX.f<int>(); // ok  
 26 
 27     xFromB.f<int>();  // error: expected primary expresion
 28   }
 29 };
 30 
 31 int main(int,char **)
 32 {
 33   Y<X> y;
 34   y.xFromB.f<int>(); // ok
 35 
 36   return 0 ;
 37 }
 38 
 39 
 40

Reply via email to