Ist libstdc ++ falsch, um die Zuweisung von flüchtigem rvalue zu std :: ignore abzulehnen?

8

Ich habe bemerkt, dass die Implementierung von std::ignore in libstdc ++ ein Argument const T& benötigt, das nicht an einen flüchtigen rvalue binden kann. Daher kann der folgende Code nicht kompiliert werden:

%Vor%

( Ссылка )

Ist dies eine Verletzung des Standards oder gibt es eine Klausel, die dieses undefinierte Verhalten rendert?

    
Brian 20.06.2016, 22:14
quelle

2 Antworten

0

Ich bin kein Sprachanwalt, also werde ich diese Frage so direkt wie möglich beantworten.

ignore wird in der Synopsis von tuple in tuple.general als solche gefunden:

%Vor%

Wie Sie bemerkt haben, ist die Implementierung libstdc ++ Definiert ignore wie folgt:

%Vor%

Während die libc ++ Version dies so definiert:

%Vor%

Als solches kompiliert es in libc ++. Nun kann die Definition von std::tie in [tuple.creation] gefunden werden sagt:

  

Rückgabe: tuple<Types&...>(t...) . Wenn ein Argument in t ist    ignore und weist dem entsprechenden Tupelelement einen beliebigen Wert zu   keine Wirkung.

Dies sagt nichts über ignore selbst aus, also werde ich das bis zu unspezifiziert Verhalten angeben. Sie können argumentieren, dass es undefiniertes Verhalten durch Auslassung ist, aber das könnte es dehnen.

    
quelle
0

Kommentar:

%Vor%     
Dieter Lücking 20.06.2016 23:21
quelle