Na blog on the progress of C++17 czytam co następuje:Dlaczego usunięto const && przeciążenie as_const?
P0007
proponuje szablon funkcji pomocnikaas_const
, który po prostu zaczyna odniesienie i zwraca go jako odniesienie doconst
.template <typename T> std::add_const_t<T>& as_const(T& t) { return t } template <typename T> void as_const(T const&&) = delete;
Dlaczego przeciążenie const&&
usunięty?
@dyp Tak, dokładnie, w przeciwnym razie nie byłoby problemu. :) Być może powinienem trochę na to popracować. Dzięki T.C. do edycji, przy okazji, początkowo miałem przykład z xvalue, ale zapomniałem zaktualizować tekst, gdy uprościłem przykład. – hvd
Tak, mój komentarz był bardziej jak wyjaśnienie twojej odpowiedzi. Nie jestem jednak pewien, czy to ograniczenie jest użyteczne; 'as_const (T const &&)' może po prostu zwrócić 'T const &&', a kompilator ostrzega o powiązaniu zmiennej 'T const &' z 'T const &&' w definicji zmiennej nie przedłuża okresu życia. – dyp
@dyp Wtedy może być po prostu 'as_const (T &&)' (no 'const' tam), który zwraca' T const && 'overload. Tak, to byłoby możliwe, ale podejrzewam, że wywołanie 'as_const' i podanie wartości rytuału jest bardziej prawdopodobne, niż błąd, który musi być obsługiwany. – hvd