>>280
D<T>*からA*にアップキャストするときB*経由かC<T>*経由かで
曖昧になるから仮想継承が必要…だよね?
ちなみにHolderから値を取り出すにはこんな感じの関数を使う。

Foo get_foo(const Holder &h) { return static_cast<B*>(h.a)->foo; }
template<typename T>
T get_t(const Holder &h) { return static_cast<C<T>*>(h.a)->t; }

>>281
済まないけどよくわからない…
特殊化するとA*からTを取り出すときにCを特殊化したかどうかの
情報が必要にならない?