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

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

本文关键字:参数 MSVC 构造函数 基类 继承      更新时间:2023-10-16

我尝试使用 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"参数视为模板。

这是之前我能找到的关于这个问题的最接近的问题。虽然阅读它找不到解决方案: 从模板基类继承构造函数

解决方法是定义 typedef 别名

typedef T<U> base_t;

并使用它来继承基类的构造函数:

using base_t::base_t;

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