
Please read below. Just got an angry email from some pedantic Mailing-List guard. On Thu, May 1, 2008 at 6:07 PM, Hicham Mouline <hicham@mouline.org> wrote:
Thanks for your clarifications,
In your example, if "MyFunc" was typedef'd before its use in the template argument as say typedef int (*MyFunc)(int); it would not conflict with its use in the template argument ?
First of all. I am sorry for an error I made when stated: template<T MyFunc()> struct X { typedef T result_type; typedef MyFunc function_type; }; This is not a valid C++ code, since MyFunc as the template parameter is a real pointer to a function, it is not a type. And you cannot make a typedef for a pointer. Only for it's type. To visualize the usage I have written a small program: #include <iostream> #include <typeinfo> typedef int (*MyFunc)(int, int); int get_int(int x) { return x; } int plus(int x, int y) { return x+y; } template<int (*MyFunc)(int)> struct X { typedef int result_type; result_type exec()const { ::MyFunc f2 = + //use scope resolution to access the global MyFunc return MyFunc(10)+f2(10,10); } }; int main(int argc, char* argv[]) { X<&get_int> x; std::cout << "sum: " << x.exec() << "\n"; }
best regards,