Перегрузка ссылками на rvalue - PullRequest
1 голос
/ 16 августа 2011

Идеальная пересылка - это здорово и все. Но что мне делать, если я хочу не совершенно вперед и вместо этого просто перегрузить что-то, что происходит с шаблонным типом?

template<typename T> void foo(T&& ref);
template<typename T> void foo(const T& ref); 

Не будет работать, потому что первая перегрузка вызовет идеальную пересылку. Мне бы очень хотелось, чтобы поведение было таким же, как если бы первым была нормальная ссылка lvalue - где T всегда будет типом значения.

1 Ответ

3 голосов
/ 16 августа 2011
#include <type_traits>

template<typename T>
typename std::enable_if
<
    !std::is_reference<T>::value,
    void
>::type
foo(T&& ref) {}

template<typename T> void foo(const T& ref) {}
...