假设我有一个模板类声明如下:
template< int *x > struct y { int *b; y() { b = x; }}
Run Code Online (Sandbox Code Playgroud)
我确实需要模板参数作为常量内存地址 - 它是一个嵌入式代码.如果我尝试像这样实例化它:(编译器是gcc 4.8.1 with -std = gnu ++ 11)
y< 1 > c;
Run Code Online (Sandbox Code Playgroud)
我将得到一个错误"无法将模板参数'1'转换为'int*'",这很好,并且根据标准.我明白了.
我的问题是,转换为指针也不起作用:
y< (int *)1 > d;
y< reinterpret_cast<int *>(1) > e;
Run Code Online (Sandbox Code Playgroud)
错误:无法将模板参数'1u'转换为'int*'
在这两种情况下.这是为什么?模板参数已经转换,不是吗?