Здравствуйте, han2, Вы писали:
H>Привет, народ.
H>Поясните, плз, почему указанный ниже код сомпилируется в VC7.1, но не компилируется в VC9, выдывая ошибку C3200 (и другие):
H>H>// . . .
H>//! Класс-наследник
H>struct D : public aux::TrimUnused< Root, A >::Result
H>{
H> typedef aux::TrimUnused< Root, A >::Result _BaseT;
H> void check(char* p)
H> {
H> *p = 'D';
H> _BaseT::check(++p);
H> }
H>};
H>// . . .
H>
Жаль, что из примера не понятно, какую роль играет эта замысловатость типов — ведь aux::TrimUnused< Root, A >::Result — это просто Root.
А вообще, похоже на еще один глюк студии. Интересно, что проблема устраняется простым вынесением определения типа _BaseT за пределы класса D. Также ошибка уходит при отказе от наследования D от aux::TrimUnused< Root, A >::Result (он же Root).