我尝试通过使用模板参数来引用全局变量的子元素-它确实适用于全局变量,但不适用于全局变量的子变量-为什么在编译时无法解析子变量的位置?
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年)说(第246页):