继承基础构造函数,基础 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;
}
使用 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 也有类似的问题。
我尝试使用 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;
}
使用 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 也有类似的问题。