继承基构造函数,基类是模板参数 (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"参数视为模板。
这是之前我能找到的关于这个问题的最接近的问题。虽然阅读它找不到解决方案: 从模板基类继承构造函数
解决方法是定义 typedef 别名
typedef T<U> base_t;
并使用它来继承基类的构造函数:
using base_t::base_t;
这不是一个独特的编译器错误;我模糊地记得旧版本的 gcc 也有类似的问题。
相关文章:
- MSVC将仅移动结构参数解释为指针
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- MSVC 和函数参数的 constexpr?
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 可变参数模板未在 MSVC 中编译?
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- MSVC使用constexpr-if从可变模板方法中的基本模板参数中吞下const
- 继承基构造函数,基类是模板参数 (MSVC)
- x64 函数调用参数推送/移动顺序 (MSVC)
- C++具有可变参数包的函数的部分模板参数推导会在 Clang 和 MSVC 中产生不明确的调用
- 如果我的模板类型首先以lambda参数而发生,则MSVC会引起一个奇怪的错误
- MSVC 错误 C2971 常量 wchar_t * 作为模板参数
- 如何修复MSVC++(Microsoft Visual studio)中"macro overloading"的可变参数宏相关问题?
- 带有可变参数的嵌套宏在GCC中编译,但在MSVC中不编译
- MSVC 错误,将 constexpr 数组作为模板非类型参数
- MSVC编译器错误将模板与枚举参数重载时
- 将模板参数传递到 MSVC 中的宏中
- 可视模板参数名称与 MSVC C++中的方法冲突
- 指向模板参数中重载函数的MSVC指针