--- Comment #1 from schaub-johannes at web dot de 2008-07-15 20:43 ---
(In reply to comment #0)
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:
templatetypename T struct bar { T foo; };
int main() { Barvoid() k; }
output:
report.cpp: In instantiation of 'Barvoid ()()':
report.cpp:1: instantiated from here
report.cpp:1: error: field 'Barvoid ()()::p' invalidly declared function
type
Testcase with function template:
templatetypename T void foo() { T bar; }
int main() { foovoid()(); }
report.cpp: In function »void foo() [with T = void ()()]«:
report.cpp:1: instantiated from here
report.cpp:1: Fehler: Variable »bar« hat Funktionstyp
I'm sorry for the german output message in the second testcase. i forgot to
change language:
report.cpp: In function 'void foo() [with T = void ()()]':
report.cpp:1: instantiated from here
report.cpp:1: error: variable 'bar' has function type
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36843