我有一个从类 A 派生的类 B。A 声明了一个静态字段 f,而 B 可能声明了一个类似的同名字段。以下不起作用:
struct A { static int f; };
struct B : A { static int f; }; // A::f is different from B::f
struct C : A {}; // A::f is the same as C::f
BOOST_STATIC_ASSERT((&A::f != &B::f));
BOOST_STATIC_ASSERT((&A::f == &C::f));
尽管理论上可以在编译时检查这些断言,但它们是不允许的,因为常量表达式不能获取地址。
有没有办法在编译时进行这种检查?