Re: template recursion in VC9
От: rg45 СССР  
Дата: 25.06.13 22:05
Оценка: 2 (1)
Здравствуйте, 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).
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.