我想了解模板化派生类中类型别名的用法,如下面的简单示例所示。我收到一条错误消息:“无效使用不完整类型。
我的问题是:我有一个模板化派生类,其模板参数是基类,我需要访问基类的类型。
下面的简单示例不符合第 21 行的错误消息:“invalid use of incomplete type ‘struct B2’”。 你能解释一下为什么情况 1 没有抱怨,为什么情况 2 不能编译吗?
有办法绕过去吗?
struct A {};
/* Case 1: this implementation compiles well */
struct B1: A {
using type = typename B1::A;
};
/* Case 2: this implementation doesn't compile */
template<class U>
struct B2: U {
using type = typename B2::U;
};
int main() {
// Case 1
B1 b1; // OK
// Case 2:
B2<A> b2; // error: invalid use of incomplete type ‘struct B2<A>’
}