Код: Выделить всё
template
struct fwd_or_copy_wrapper
{
fwd_or_copy_wrapper(T&& t): _t(FWD ? std::forward(t) : std::add_const_t(t)) {}
private:
T _t;
};
Код: Выделить всё
template
fwd_or_copy_wrapper(T&& t) -> fwd_or_copy_wrapper;
Код: Выделить всё
template
using fwd_wrapper = fwd_or_copy_wrapper;
template
using copy_wrapper = fwd_or_copy_wrapper;
Но вывод MSVC неожиданный. Он не только выполняет лишние вызовы copy-ctor, но и копирует вместо перемещения для fwd_wrapper.
Демо находится здесь
Три вопроса:
- это ошибка в том, что clang не может скомпилировать руководство по дедукции?
- Это ошибка в том, что MSVC генерирует копию вместо перемещения, или здесь происходит что-то еще?
- как изменить класс-оболочку, чтобы все три компилятора работали правильно?
Подробнее здесь: https://stackoverflow.com/questions/790 ... whos-right