Contrassegneresti mai un parametro di riferimento C++ RValue come const

Contrassegneresti mai un parametro di riferimento C++ RValue come const

Ecco un punto in cui ciò avviene nello standard C++11:

template <class T> reference_wrapper<T> ref(T&) noexcept;
template <class T> reference_wrapper<const T> cref(const T&) noexcept;
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;

Cioè. Un const T&& viene utilizzato per acquisire tutti i valori, const o meno, e inviarli a un errore in fase di compilazione, consentendo al contempo lvalue, anche const lvalori da legare e lavorare.

Ora questo potrebbe probabilmente essere fatto anche con T&& e un enable_if vincolo. Ma se c'è una cosa che C++ ci ha insegnato negli ultimi decenni:non bruciare ponti nella progettazione del linguaggio. Il programmatore C++ troverà spesso un modo intelligente per utilizzare una funzionalità del linguaggio che inizialmente era considerata inutile. Ed è in quello spirito che const T&& è stata lasciata come opzione legale.