繁体   English   中英

C ++ 11模板参数misbind的示例?

[英]Example of C++11 template parameter misbind?

在C ++ 11标准的6.8.3中,它说:

如果在解析期间,模板参数中的名称的绑定方式与试验解析期间绑定的名称不同,则程序格式不正确。

由于此要求而导致程序错误的示例是什么?

#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是函数声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM