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:
( Ссылка )
Ist dies eine Verletzung des Standards oder gibt es eine Klausel, die dieses undefinierte Verhalten rendert?
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:
Wie Sie bemerkt haben, ist die Implementierung libstdc ++ Definiert ignore
wie folgt:
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 int
istignore
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.
Tags und Links c++ c++11 language-lawyer g++ tuples