Обёртка над обработчиком всегда вызывает копирующую перегрузку
void process(const std::string& s); // копирует внутрь
void process(std::string&& s); // забирает строку
template <class T>
void traced(T&& arg) {
trace("process");
process(arg);
}
traced(std::string(big_buffer));
Даже для временной строки вызывается process(const std::string&). Как исправить обёртку?
- Передавать дальше std::forward<T>(arg)
- Передавать дальше std::move(arg) всегда
- Заменить T&& на const T& в шаблоне
- Заменить T&& на T и передать arg
