------- 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: > > 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 >
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