ご存知のように、非キャプチャ ラムダ ファンクターは実行時に関数ポインターに変換できますが、コンパイル時はどうでしょうか。つまり、以下のコードに似たものは可能ですか? ラムダファンクターを関数パラメーターとして渡すなどの回避策を提案しないでください。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))>();
^