Kann C ++ 17's "Template Argument Deduction" für Klassenvorlagen lokale Typen ableiten?

8

P0091R3 ("Vorlagenargumentabzug für Klassenvorlagen") ) wurde kürzlich zu gcc trunk hinzugefügt und kann sein getestet auf wandbox .

Etwas, das ich im Sinn hatte, war die Möglichkeit, es zu verwenden, um ein "scope guard" in wenigen Zeilen Code:

%Vor%

Ich habe versucht es auf der Wandbox zu implementieren ...

%Vor%

... aber die Kompilierung ist mit dem folgenden Fehler fehlgeschlagen:

%Vor%

Ich habe dann mit einem lokalen Typ ohne Lambda versucht und den gleichen Fehler erhalten.

%Vor%

Danach habe ich einen nicht-lokalen Typ versucht, und es hat wie erwartet funktioniert.

%Vor%

Ist dieses Feature so konzipiert, dass lokale Typen nicht abgeleitet werden können?

Oder ist das ein Fehler in der aktuellen Implementierung von gcc ?

    
Vittorio Romeo 07.10.2016, 12:02
quelle

1 Antwort

7

Dies ist ein Fehler in der aktuellen Implementierung: 77890 ( NEW impliziert Gültigkeit , im Gegensatz zu UNCONFIRMED in 7.0 fixiert). Die Möglichkeit, ein Lambda abzuleiten, war eines der motivierenden Beispiele der Originalarbeit, also wäre es ziemlich peinlich, wenn es nicht funktionieren würde:

%Vor%
%Vor%

Wir können ein wirklich einfaches Beispiel erstellen:

%Vor%

Dies sollte eine Überladungsauflösung auf dem synthetisierten Funktionssatz durchführen, der aus den Funktionen besteht:

%Vor%

sollte die erste Überladung auswählen und diesen Rückgabetyp als Typ von _ verwenden, wobei TF der Typ des Lambda ist. Das sollte alles funktionieren.

    
Barry 07.10.2016, 12:20
quelle