我尝试实现一个带有右值引用的变量列表的函数。看起来像这样:
Conv2DTranspose()
当我尝试这样称呼它时:
template <
typename... Args,
typename = std::enable_if_t<std::conjunction<
std::is_rvalue_reference<Args>...>::value>
>
void myfunc(Args&&... args)
{ }
编译器告诉我他找不到该函数。如果我删除了SFINAE,请检查它是否有效。 我在这里错过了什么吗,还是编译器错误? 我正在使用Visual Studio和工具集v140和v141。
预先感谢, 马丁
答案 0 :(得分:2)
Args
不是右值引用,Args&&
不是。
#include <type_traits>
#include <utility>
template <
typename... Args,
typename = std::enable_if_t<std::conjunction<
std::is_rvalue_reference<Args&&>...>::value>
>
void myfunc(Args&&... args) { }
struct probe {};
int main() {
probe x;
// this compiles
myfunc(std::move(x));
// this does not
myfunc(x);
return 0;
}