众所周知,非捕获 lambda 仿函数可以在运行时转换为函数指针,但是编译时呢?也就是说,是否可能类似于下面的代码?请不要提出解决方法,例如将 lambda 仿函数作为函数参数传递,我想知道更多 C++11 标准在哪里/如何禁止这样做。
template <void(*fptr)()>
void f()
{
// do something
}
int main()
{
auto l([]{});
f<(void(*)())(decltype(l))>();
return 0;
}
的强制性错误gcc-4.8
:
c.cpp: In function 'int main()':
c.cpp:11:7: error: parse error in template argument list
f<(void(*)())(decltype(l))>();
^
c.cpp:11:36: error: statement cannot resolve address of overloaded function
f<(void(*)())(decltype(l))>();
^