Почему это работает:
template <typename T>
struct foo
{
};
struct A
{
typedef foo<A> type;
};
struct B : public A
{
typedef foo<B> type;
};
int main()
{
B::type john;
return 0;
}
Но не это:
template <typename T>
struct foo
{
};
template <typename T>
struct Shared
{
typedef foo<T> type;
};
struct A : public Shared<A>
{
};
struct B : public A, public Shared<B>
{
};
int main()
{
// g++ 4.5 says :
// error: reference to 'type' is ambiguous
B::type john;
return 0;
}
В моем коде foo
на самом деле boost::shared_ptr
и, как вы можете видеть, япытаюсь так учесть некоторые typedef
с использованием Shared
класса.