函数模板:类型名声明
在 GCC 上,以下给出了一个错误: no type named 'x' in 'struct Type'
在 VC++ 上,它抱怨 p
未声明
struct Type
{
static int const x = 0;
};
template <class T> void Func()
{
typename T::x * p; // p to be pointer
}
int main()
{
Func<Type>();
}
On GCC, The following gives me an error: no type named 'x' in 'struct Type'
On VC++, It complains about p
being undeclared
struct Type
{
static int const x = 0;
};
template <class T> void Func()
{
typename T::x * p; // p to be pointer
}
int main()
{
Func<Type>();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
T::x
变为Type::x
,它是一个int
,而不是类型。您已告诉编译器
T::x
使用typename
命名类型。实例化Func
时,T::x
不是类型,因此编译器会报告错误。T::x
becomesType::x
, which is anint
, not a type.You've told the compiler that
T::x
names a type by usingtypename
. WhenFunc<Type>
is instantiated,T::x
is not a type, so the compiler reports an error.由于
Type::x
不是一个类型,而是一个值,因此当您编写typename
时,您'告诉编译器在Type
中查找名为x
的嵌套类型,但它不能。因此,GCC 表示“struct Type”中没有名为“x”的类型,这比 VC++ 生成的消息更有帮助。Since
Type::x
is not a type, rather a value, so when you writetypename
, you're telling the compiler to find a nested type with namex
insideType
, but it couldn't. Hence the GCC saysno type named 'x' in 'struct Type'
which is more helpful than the message generated by VC++.在C++11中,using关键字可用于类型别名
In C++11, the using keyword can be used for type alias