为什么在间接使用基类 typedef 时不断出现语法错误,而直接使用它就可以了?
Why do I keep on getting a syntax error when using a base class typedef indirectly, when it's fine to use it directly?
template<typename T>
struct self
{
typedef T type;
};
template<class T>
class A
{
struct Type { int x; };
};
template<class T>
class B1 : A<T>
{
Type insert(); // OK
};
template<class T>
class B2 : self< A<T> >::type
{
Type insert(); // syntax error? Why?
};
Visual C++有非标准的模板名称查找规则;这是他们在这里记录的三个不合规行为之一(第三段)。
我相信所有的查找都会延迟到模板被实例化。那时,所有依赖名称都可用,因此通常不需要template
和typename
关键字以及显式成员访问;而且这个编译器不需要强制执行它们。
在您的两个派生类中,Type
都是一个依赖名称,因此必须(当使用使用标准两阶段查找的编译器时)使用typename
:进行限定
typename Type insert();
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- C++语法头文件错误
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- system() 返回错误语法错误:"("意外
- C++图形初始化错误(语法或丢失文件缺陷?
- 获取0:1(1):错误:语法错误,尝试编译着色器时意外$end
- Visual Studio错误:语法错误:标识符