让我们从代码示例开始,因为应该很容易看到发生了什么:
template <typename T>
struct Base
{
using Type = int;
};
template<typename T>
struct Derived : public Base<T>
{
// error: unknown type name 'Type'
using NewType = Type;
};
int main()
{}
Run Code Online (Sandbox Code Playgroud)
我本来希望可以找到Base的Type别名。但是,我尝试过的所有编译器(MSVC,Clang和GCC)似乎都不喜欢此代码。
更令人惊讶的是,将Derived的继承更改为:
struct Derived : public Base<int>
Run Code Online (Sandbox Code Playgroud)
解决问题。
我可以更改一些内容以允许“派生”找到Base的别名吗?