When you pass a function-type to a template as a type-parameter, you cannot use
that type to declare member functions (in class templates), or to declare free
functions (in function templates). This looks strange to me. comeau allows to
do this.

Testcase with class template:

template<typename T> struct bar { T foo; }; 
int main() { Bar<void()> k; }

output: 
report.cpp: In instantiation of 'Bar<void ()()>':
report.cpp:1:   instantiated from here
report.cpp:1: error: field 'Bar<void ()()>::p' invalidly declared function type


Testcase with function template:

template<typename T> void foo() { T bar; }  
int main() { foo<void()>(); }

report.cpp: In function »void foo() [with T = void ()()]«:
report.cpp:1:   instantiated from here
report.cpp:1: Fehler: Variable »bar« hat Funktionstyp


-- 
           Summary: Not able to declare a function using function type
                    template parameter
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: schaub-johannes at web dot de
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to