使用 c++17 编译时无法从 base-class 访问成员类型

Can not access member type from base-class when compiled using c++17

我有以下代码在 中编译成功。

template<class T, class ...Args>
class B 
{
public:
   using AbcData = int;
};

template<typename ...Args>
class D : public B<float, Args...>
{
public:
   AbcData m_abc;
};

但是在中编译时,出现如下错误。

error C2061: syntax error: identifier 'AbcData'

代码有什么问题以及如何解决这个问题?

当基础 class B class 依赖于模板参数时,即使派生 class D 这里键入别名 AbcData继承自 B,仅在 D class 中使用 AbcData 是不够的。

你需要明确,从你拥有它的地方

template<typename ...Args>
class D : public B<float, Args...>
{
public:
    typename B<float, Args...>::AbcData m_abc; // --> like this
};