Re[2]: template recursion in VC9
От: han2  
Дата: 26.06.13 07:38
Оценка:
Здравствуйте, rg45, Вы писали:

R>Жаль, что из примера не понятно, какую роль играет эта замысловатость типов — ведь aux::TrimUnused< Root, A >::Result — это просто Root.


Это редуцированный до случая с T[N]=0, где N=0, пример реального шаблона, используемого для организации линейного наследования классов.

R> ведь aux::TrimUnused< Root, A >::Result — это просто Root.


Соответственно, aux::TrimUnused< Root, A >::Result — это, на самом деле A< Root >

R>А вообще, похоже на еще один глюк студии.


Если это ошибка, то она также есть и в VC10, которая выдаёт ту же ошибку при компиляции этого кода.

R>Интересно, что проблема устраняется простым вынесением определения типа _BaseT за пределы класса D.


Да, так и есть, проверил. Значит, скорее всего, ошибка VC.

R>Также ошибка уходит при отказе от наследования D от aux::TrimUnused< Root, A >::Result (он же Root).


По указанной выше причине (организация рекурсивного линейного наследования классов) это сделать не возможно, разве что перейти на использование boost::mpl::inherit_linearly.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.