Рассмотрим следующий код:
template <class...> struct base {};
template <class... T> struct intermediate: base<void, T...> {};
template <class... T> struct derived: base<T...>, intermediate<T...> {};
using type1 = derived<int>::intermediate::base; // works
using type2 = derived<int>::base; // ambiguous
Будет ли способ заставить его работать без двусмысленности, чтобы derived<int>::base
означал самый "прямой" базовый класс в иерархии (в этом примере base<int>
). Шаблон метапрограммирования приветствуется.