Zauważyłem, że implementacja libstdC++ z std::ignore
przyjmuje argument const T&
, który nie może wiązać się z niestabilnym rwartem. Stąd poniższy kod nie kompilacji:Czy libstdC++ jest błędne, aby odrzucić przypisanie zmiennej rvalue do std :: ignore?
#include <tuple>
#include <utility>
struct C {};
using VC = C volatile;
int main() {
std::tuple<VC> t;
std::tie(std::ignore) = std::move(t);
}
(http://coliru.stacked-crooked.com/a/7bfc499c1748e59e)
Czy to z naruszeniem normy, czy też istnieje klauzula, która czyni tę niezdefiniowanej zachowanie?
Dlaczego chcesz użyć 'volatile' w pierwszej kolejności? Wyłącza optymalizacje, nie sprawia, że wątki są bezpieczne. Nie rozumiem, dlaczego to zrobiłeś ... –
@JesperJuhl * ponieważ jest tam * – Brian
Nie bez powodu. Kod można zmienić. –