lambda jako element statyczny
Próbuję użyć lambda jako elementu statycznego, takiego jak ten:
struct A
{
static constexpr auto F = [](){};
};
int main()
{
A::F();
return 0;
}
Czy to nawet poprawny kod C ++ 11? W clang pojawia się ten błąd:
error: constexpr variable 'F' must be initialized by a constant
expression
static constexpr auto F = [](){};
^~~~~~
Wygląda na to, że lambdy nie są uważane za stałe wyrażenie. Czy to jest poprawne? Być może nie w pełni zaimplementowali lambdy w klangach, ponieważ wydaje się, że gcc 4.7 zezwala na toconstexpr
, ale daje inny błąd:
error: ‘constexpr const<lambda()> A::F’, declared using local type ‘const<lambda()>’, is used but never defined
Nie jestem pewien, rozumiem, co to znaczy. Wydaje się, że poprawnie wyprowadza typ lambda, ale deklaruje go i nie definiuje. Jak chciałbym to zdefiniować?