我想出了以下问题(下面的代码):
template<class T>
void printname(const T& t){std::cout<<t<<std::endl;}
template<class T>
void applyfunc(const T& t, void (*f)(const T& )){(*f)(t);}
int main(){
const int a=1;
applyfunc(a,printname);
getchar();
return 0;
}
我的问题是它使用 vc++8(VS2005) 和 GCC、CLang(在 Ubuntu 12.04 上)编译,但无法使用 vc++ 2008 express 编译。
这似乎是合法的代码,但我真的不明白为什么。
如果有人能解释一下,我将不胜感激。
假设它是合法的,有没有什么方法可以用函子做类似的事情?