带有 std::is_rvalue_reference 的可变参数模板参数列表的 SFINAE 失败

SFINAE with std::is_rvalue_reference for variadic template argument list fails

我尝试实现一个采用右值引用变量列表的函数。它看起来像这样:

template <
    typename... Args,
    typename = std::enable_if_t<std::conjunction<
        std::is_rvalue_reference<Args>...>::value>
>
void myfunc(Args&&... args)
{ }

当我尝试这样称呼它时:

void doit()
{
    int x;

    myfunc(std::move(x));
}

编译器告诉我他找不到函数。如果我删除 SFINAE 检查它是否有效。 我在这里错过了什么,还是编译器错了? 我将 Visual Studio 与工具集 v140 和 v141 一起使用。

提前致谢, 马丁

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;
}