Здравствуйте, 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.