template <typename T> void foo(T&& t); // universal reference
template <typename T> void bar(T& t); // lvalue reference
那么我们如何声明对未知类型的严格右值引用呢?
答案 0 :(得分:4)
如果将T
推断为左值,则可以选择使用SFINAE禁用该功能:
#include <type_traits>
template <typename T>
auto foo(T&& t)
-> typename std::enable_if<!std::is_lvalue_reference<T>::value>::type
{
}
如果T&&
产生左值参考,则启用:
#include <type_traits>
template <typename T>
auto foo(T&& t)
-> typename std::enable_if<std::is_rvalue_reference<T&&>::value>::type
{
}