这是一个简化的示例:
class A
{
enum {OFFSET = 4}; //Due to packing
bool m_bool;
};
template<class T>
class B : public A
{
MyClass<T> m_class;
};
现在假设 A 类可以通过 MyClass 的基类使用 MyClass 功能的子集,我想做的是验证关于“m_class”相对于 A 类实例的位置的假设。
我在 B 类的成员函数中尝试了以下代码,但它给出了错误(“预期的常量表达式”):
static_assert ((byte *)nullptr + OFFSET ==
(byte *)&((B<T> *)nullptr)->m_class, "Error 'm_class' incorrectly located!");
对于当前版本的编译器来说,这是否过于雄心勃勃?