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
是函数声明。
相关文章:
- 激励'inline'说明符的真实世界示例?
- 为什么示例代码访问IUnknown中已删除的内存
- 以下示例中如何避免代码复制?C++/库达
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 示例C++项目编译中的警告
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 为什么理解这个递归示例如此难以转化为直觉?
- Eventloop 卡住:NAO C++ SDK OnFaceDetection 示例
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 适用于 WebView2 旧版本的示例应用程序
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 将数组/向量发送到 c++ 脚本的 cython 示例
- 了解提升执行器示例
- 请求最简单的 OpenMP 目标 GPU 示例
- 两种模板示例有什么区别?
- 有人可以在下面的示例 C++ 程序中解释字符数组 KCHAR1 的奇怪行为吗?
- Distirbute Candy - 查找问题的最小可重现示例
- c++ 11模板参数misbind示例