在的C++ 11标准6.8.3,它说:C++ 11模板参数misbind的示例?
如果 在分析过程中,在模板参数的名称是不同的约束比它的试用 解析,在节目中的约束是不合格的。
什么是由于此要求而不合格的程序示例?
在的C++ 11标准6.8.3,它说:C++ 11模板参数misbind的示例?
如果 在分析过程中,在模板参数的名称是不同的约束比它的试用 解析,在节目中的约束是不合格的。
什么是由于此要求而不合格的程序示例?
#include <iostream>
#include <typeinfo>
typedef const int cint;
template <int a> struct x
{
static cint b = 0;
};
template <> struct x<42>
{
typedef cint b;
};
cint w = 17;
int main()
{
cint (w)(42), (z)(x<w>::b);
std::cout << typeid(z).name() << std::endl;
}
第一个声明在main()
需要被消除歧义,以进行试用解析。在这个解析过程中,本地w
是未知的,因为解析纯粹是语法的(事物只被解析,没有语义动作被执行)。因此,w
是一个全局常量,其值为17,x<w>::b
是一个值,而z
是一个变量。
在真正的语法分析过程中,会发生语义动作。因此,名称w
绑定到刚刚声明的本地常量,其值为42,x<w>::b
成为类型,并且z
是函数声明。
“试用解析”是当你不购买完整版本的编译器。 – 2013-04-11 06:44:34
请参阅下面的评论以了解'trial parse'的实际定义。 – 2013-04-11 16:08:42