Eksperymentowałem z lambdami i kompilatorami z powodu another question tutaj na SO.
Właśnie sobie sprawę (i to jest rzeczywiście całkowicie normalne), że następujący kod jest ważny:Czy [] <typename>() {} ma poprawną definicję lambda?
int main() {
auto l = [](){};
l.operator()();
}
Faktycznie średnia mówi, że rodzaju zamknięcie ma wbudowany publiczny operator wywołania funkcji i tak dalej, a tym samym ma sens, aby móc go przywołać.
Nie mogę wyjaśnić, patrząc na standardzie (dobrze, projekt roboczy) jest fakt, że GCC (6,1) kompiluje się następujący fragment (dzyń 3.9 nie robi):
int main() {
auto l = []<typename>(){};
l.operator()<void>();
}
żadne ostrzeżenia , bez błędów. Czy jest to poprawny kod, czy powinien zostać odrzucony przez kompilator?
[Opracowanie z powodzeniem] (http://cpp.sh/4asuj) – amanuel2
@ amanuel2 wiem, że kompiluje (GCC przynajmniej), ale pytanie brzmi, czy jest ważne, czy nie. – skypjack
C++ 14 pozwoli na "szablonowe" lambdy, ale jest to ze słowem kluczowym 'auto' zamiast ze składnią szablonu' <> '(zobacz https://stackoverflow.com/questions/3575901/can-lambda-functions-be - rozważany).Może programiści GCC chcieli eksperymentować z różnymi sposobami dodawania tego rodzaju funkcjonalności? –