必须扩展 C3520 参数包 - 'variadic using' 的不正确行为

C3520 parameter pack must be expanded - incorrect behaviour for 'variadic using'

在使用 Microsoft Visual C++ 编译器 15.9.28307.1300 (amd64) 和 c++17 标准使用 Qt 5.12 编译以下代码时,出现以下错误:

error C3520: 'Args': parameter pack must be expanded in this context note: see reference to class template instantiation 'Helper<Args...>' being compiled

template<typename T> 
struct Base { 
    void operator()(const T& arg){} 
}; 

template <typename... Args>
class Helper : Base<Args>... {
public:
    using Base<Args>::operator()...;
};

这是 msvc 的错误吗?有任何已知的解决方法吗?使用 clang 在 macOS 上编译相同的代码。

作为可变参数 using (C++17) 的解决方法,您可以使用递归方式:

template <typename... Args>
class Helper;

template <>
class Helper<>
{
};

template <typename T>
class Helper<T> : Base<T>
{
public:
    using Base<T>::operator();
};

template <typename T, typename... Ts>
class Helper<T, Ts...> : Base<T>, Helper<Ts...>
{
public:
    using Base<T>::operator();
    using Helper<Ts...>::operator();
};

Demo