2016-11-24 2 views
5

VS2015 Update 3 kompiliert diese ohne Fehler und ohne Vorwarnung. Ich hatte jedoch den Eindruck, dass Provisorien nur an konstante Referenzen gebunden werden konnten. Ist das nicht konform oder missverstehe ich etwas?Zuordnung zu nicht konstanter Referenz

struct Foo {}; 
Foo Func6() { return Foo(); } 

TEST(Arguments, NonConstReference) 
{ 
    Foo& bob = Func6(); 
} 

EDIT

Die von marcinj verknüpfte Frage ist die gleiche Frage, wenn auch diese Frage nicht speziell über VS2015 und wurde nicht gefunden, wenn ich dieses oben eingegeben haben.

Ich hatte mit/W4 getestet, um zu sehen, ob ich eine Warnung bekommen und nicht ein nicht sehen, aber es erneut zu testen finde ich, dass jetzt tue ich. Beim Öffnen der Projekteigenschaften zum Anpassen einer Einstellung hat VS2015 die Angewohnheit, den Eigenschaftendialog für eine andere Build-Konfiguration als die aktuell ausgewählte zu zeigen, ein sehr unheilvolles Verhalten, das mich viele Male erwischt hat (und ich bin mir sicher, dass es weiter geht) dazu).

Wie in dieser anderen Frage mit Disable Language Extensions (/ Za) erwähnt wird, macht dies einen Fehler, ist aber leider keine brauchbare Lösung, da die eigenen Plattform-Header von Microsoft nicht kompiliert werden.

Antwort

7

Die MSVC Compiler hat eine Nicht-Standard-Erweiterung, standardmäßig aktiviert, die Provisorien an nicht const Referenzen zu binden, ermöglicht. Verwenden Sie hierzu die command-line option /Za oder die entsprechende Projekteigenschaft.

+0

Nie verstanden die Verwendung von diesem. –

+0

@GillBates noch nutzloser, wenn Sie rvalue refs haben! –

+1

@GuillaumeRacicot Natürlich ist diese Erweiterung um mindestens eine Dekade älter als rvalue-Referenzen, daher halte ich das für keinen fairen Vergleich. – Angew

Verwandte Themen