继承基础构造函数,基础 class 是模板参数 (MSVC)

Inherit base constructor with base class being a template parameter (MSVC)

我尝试使用 VS2017 实现此代码,但出现错误:

template <class T>
class A {
    public :
    A() {}
};

template < template <class U> class T, class U>
class B : public T<U> {
    using T<U>::T;//Errors : # 'T': is not a member of 'A<U>' # 'T': symbol cannot be used in a using-declaration
};

int main() {
    B<A, int> test;
    return 0;
}

根据 https://wandbox.org/

使用 Clang 和 GCC 完美工作

我想知道为什么它在 Visual Studio 上不起作用,以及如何修复它。看起来 VS 不想将第二个 'T' 参数视为模板。

这是我之前能找到的与此事最接近的另一个问题。虽然无法找到阅读它的解决方案: Inheriting constructors from a template base class

解决方法是定义一个 typedef 别名

typedef T<U> base_t;

并使用它从基础 class:

继承构造函数
using base_t::base_t;

这不是一个独特的编译器错误;我依稀记得旧版本的 gcc 也有类似的问题。