Это гарантированно сработает:
struct A
{
struct Gold {};
};
struct B : public A
{
typedef Gold BaseGold;
struct Gold {};
};
struct C : public B
{
typedef Gold BaseGold;
struct Gold {};
};
static_assert(is_same<B::BaseGold, A::Gold>::value, "Not the right treasure!");
static_assert(is_same<C::BaseGold, B::Gold>::value, "Not the right treasure!");
Кажется, работает на VS2010. Очевидно, он полагается на тонкие правила поиска по порядку объявления / имени, поэтому мне было интересно, что стандарт говорит по этому поводу ...