Bildiğimiz gibi, yakalamayan lambda funktörleri çalışma zamanında fonksiyon göstergelerine dönüştürülebilir, ancak derleme zamanı nasıl olur? Yani, aşağıdaki kodlara benzer bir şey mümkün mü? Lütfen, bir fonksiyon parametresi olarak lambda funkerini geçmek gibi bir geçici çözüm önermeyin, C++ 11 standardının nerede/nasıl olduğunu daha fazla bilmek isterim.lambda funküllerin fonksiyon göstergelerine derleme zamanı dönüşümü
template <void(*fptr)()>
void f()
{
// do something
}
int main()
{
auto l([]{});
f<(void(*)())(decltype(l))>();
return 0;
}
gcc-4.8
ile zorunlu hatası: hatta boş bir kapatma ile
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))>();
^
[expr.prim.lambda]/6 "Lambda-yakalama içermeyen bir genel olmayan lambda ifadesi için kapatma türü, işleve gösterici için açık const dönüştürme işlevine sahip olmayan bir sanal ortama sahiptir ... ] "ve" constexpr "olmak zorunda değil. – dyp
@DyP aaahh, bir çalışma zamanı operatörü hatalı. Lütfen cevap olarak yapıştırın. – user1095108
Biliyorsam * neden * 'constexpr' olması gerekmiyor, belki belki;) – dyp