Ich glaube, ich habe eine andere "clang vs gcc" Inkonsistenz zwischen lambdas und aufrufbaren Objekten gefunden.
decltype(l)::operator()
sollte äquivalent zu C::operator()
sein, aber wenn variadic pack im generischen lambda leer ist, weigert sich gcc, zu kompilieren:
15: Fehler: Keine Übereinstimmung für Aufruf von '(main (): :) (int)' l (1);
15: hinweis: kandidat: decltype (((main (): :) 0u) .main (): :( x,)) (*) (auto: 1 & amp; & amp ;; auto: 2 & amp; & amp ;; ...)
15: Hinweis: Kandidat erwartet 3 Argumente, 2 zur Verfügung gestellt
14: Hinweis: Kandidat: Vorlage main () ::
auto l = [] (auto & amp; & amp; x, auto & amp; & amp; ...) {return x; };
14: Hinweis: Schablonenargumentabzug / -ersetzung fehlgeschlagen:
15: Hinweis: Kandidat erwartet 2 Argumente, 1 bereitgestellt
l (1);
Live-Beispiel auf godbolt.org .
%Vor%Konnte nichts finden, was mit dem gcc bug tracker zusammenhing (habe nicht zu viel Zeit mit der Suche verbracht) - ist gcc hier falsch?