1
#include <type_traits>
struct BaseClass
{
int baseValue;
};
struct DerivedClass : public BaseClass
{
int derivedValue;
};
int main()
{
auto memDataPtr = &DerivedClass::baseValue;
static_assert(std::is_same<decltype(memDataPtr), int BaseClass::*>::value, "Huh?");
}
このコードをコンパイルする際に私が試したすべてのコンパイラ、つまり静的アサートは起動しません。これは、基本クラスから継承したメンバのアドレスを取得すると、メンバを指定するときに派生クラス名を明示的に使用しても、その結果のメンバへのポインタが、そのメンバの基底クラスを参照することを意味します。ベースクラスのメンバへのポインタの型を控除
私はこの仕様のどこに明示的に呼び出されているのか、この振る舞いの背後にある理由を知りたいのは興味があります。