为什么不允许全局的结构/联合子项作为模板引用参数 - 而是全局变量本身
why are struct/union childs of global not allowed as template reference parameter - but the globals itself?
我尝试使用模板参数引用全局变量的子元素 - 它确实适用于全局元素,但不适用于全局变量的子元素 - 为什么在编译时无法解析子元素?
typedef unsigned char byte_t;
typedef unsigned short word_t;
struct byte_reg_t
{
byte_t low;
byte_t high;
};
union word_reg_t
{
word_t value;
byte_reg_t part;
};
word_t rax;
byte_t rah;
word_reg_t r16;
byte_reg_t r8;
template<typename ValueType, ValueType& Ref>
ValueType ret_ref()
{
return Ref;
}
int main()
{
word_t x = ret_ref<word_t,rax>();
byte_t h = ret_ref<byte_t,rah>();
//word_t sx = ret_ref<word_t,r16.value>(); // compile error
//byte_t sh = ret_ref<byte_t,r16.part.low>(); // compile error
//byte_t sh2 = ret_ref<byte_t,r8.low>(); // compile error
return 0;
}
VS2010 和 clang 3.1 编译器不允许//编译错误行
感谢任何清晰的描述,因为我没有看到编译器行为的任何技术原因
答案就在C++标准中。很抱歉已经过时了,但我的版本(ISO/IEC 14882,2003 年第 2 版)说(第 246 页):
§14.3.2 模板非类型参数
[..]
3 [注:数组元素和名称的地址或 非静态类成员的地址是不可接受的模板参数。[..]]
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 通过常量引用传递参数的矩阵模板类
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 具有常量引用参数的函数模板专用化
- 作为参数引用
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 如何传递带有通过引用传递的结构参数的函数?
- 将输入参数作为右值引用传递?
- 使用引用与指针将数组作为参数传递
- 根据模板参数引用不同基类的函数
- 默认情况下C++数组作为参数引用
- 对指针C++的参数引用
- 作为非类型模板参数引用
- 重用返回语句或按参数引用返回
- 将参数引用传递给函数C++
- 从另一个参数引用的模板可变参数
- 成员变量多态性和参数引用
- 按参数引用或按参数引用之间的差异
- 无法实例化抽象类:为什么模板参数(引用)导致这种情况