Kann ich das Ergebnis eines C ++ 17-Captureless-Lambda-Constexpr-Konvertierungsoperators als Funktionszeiger-Template-Nicht-Typ-Argument verwenden?

9

Bei der Beantwortung Wie mache ich schreibe einen Lambda-Ausdruck, der wie eine Methode aussieht? Ich habe versucht, ein Captureless-Lambda in einen Memberfunktionszeiger umzuwandeln, indem ich die Tatsache ausnutze, dass seit C ++ 17 Capturesslambdas einen constexpr Konvertierungsoperator zu ihrem Funktionszeigertyp.

Ich kam also auf ein Problem zu:

%Vor%

Nun kompiliert dies in clang (seit 5.0.0), aber gcc (& gt; = 7.2) beschwert sich:

%Vor%

Die Frage ist, wer hat Recht?

    
Massimiliano Janes 02.12.2017, 10:19
quelle

1 Antwort

3

Dies ist ein gcc-Fehler, der 83258 eingereicht wurde.

In C ++ 14 hatten wir eine Verknüpfungsanforderung für nicht typisierte Vorlagenparameter vom Zeigertyp. Aber in C ++ 17 (als Ergebnis von N4268 ) ), muss der Parameter nur ein konvertierter konstanter Ausdruck vom richtigen Typ sein , mit ein paar weiteren Einschränkungen (von denen keine hier relevant sind). Sobald wir fp konstruieren können, sollten wir es als Vorlageparameter verwenden können.

    
Barry 02.12.2017, 22:23
quelle