Was ist falsch an diesem rekursiven polymorphen C ++ 1y Lambda-Aufruf?

8

Ich spielte mit polymorphen variadischen Lambdas auf Clang herum und bemerkte, dass Clang diesen hier nicht mochte

%Vor%

Es ist beabsichtigt, "1234" zu setzen. Eine 0 wird an die Parameterliste angehängt (und wiederum wird einer der Parameter von der Vorderseite jedes Mal entfernt) und ein Zähler beobachtet, wann wir aufhören müssen, weil wir einen Dummy 0 treffen würden.

Aber Clang beklagt sich über

%Vor%

In seinem Backtract sind die meisten Funktionsrahmen

%Vor%

Das scheint eine rekursive Funktionsschablone zu sein, die sich selbst aufruft, und ich kann den unendlichen Schabloneninstanzationswahnsinn nicht sehen. Kann jemand bitte etwas Licht abwerfen? Verbietet der Standard Perpahs Rekursion wie das für Lambdas?

    
Johannes Schaub - litb 06.03.2014, 21:24
quelle

2 Antworten

10

Das sollte [dcl.spec.auto] / 11 (Zitat n3797) sein

  

Wenn der Typ einer Entität mit einem nichtdeduzierten Platzhaltertyp benötigt wird, um den Typ eines Ausdrucks zu bestimmen,   das Programm ist schlecht geformt. Sobald eine return -Anweisung in einer Funktion gesehen wurde, wird jedoch der Rückgabetyp zurückgegeben   von dieser Aussage abgeleitet kann im Rest der Funktion verwendet werden, auch in anderen return -Anweisungen.

Wenn Sie also die Rückgabeanweisungen zurückgeben, kann die Rückgabetypableitung erfolgreich ausgeführt werden:

%Vor%

Live-Beispiel

    
dyp 06.03.2014, 21:35
quelle
2

Meine Vermutung wäre, dass es immer wieder versucht, Ihren Rückgabetyp abzuleiten. Wenn es return me( ... ) sieht, versucht es herauszufinden, was die Rückgabe dieser THAT-Funktion ist, was auch auto ist, was es erforderlich macht herauszufinden, was return me( ... ) ist usw.

Vielleicht versuchen

%Vor%

oder versuchen Sie decltype(a) als Rückgabetyp.

Ich habe im Moment keinen 1y-Compiler zur Hand, oder ich könnte das sicher sagen.

    
KitsuneYMG 06.03.2014 21:34
quelle