Чтение этого вопроса заставило меня задуматься: есть ли техническая причина отказа от перегрузок шаблонов классов?
При перегрузке я имею в виду несколько шаблонов с одинаковыми именами, но разные параметры, например
template <typename T>
struct Foo {};
template <typename T1, typename T2>
struct Foo {};
template <unsigned int N>
struct Foo {};
Компилятор справляется с обработкой перегруженных функций и шаблонов функций, не могли бы ли быть применены те же методы (например, манипулирование именами) к шаблонам классов?
Сначала я подумал, что, возможно, это вызовет некоторые проблемы неоднозначности при использовании идентификатора шаблона в одиночку, но единственный раз, когда это может произойти, это передать его как аргумент шаблона шаблона, поэтому тип параметра можно использовать для выберите соответствующую перегрузку:
template <template <typename> class T>
void A {};
template <template <unsigned int> class T>
void B {};
A<Foo> a; // resolves to Foo<T>
B<Foo> b; // resolves to Foo<N>
Считаете ли вы, что такая функция может быть полезна? Есть ли какие-то "хорошие" (т.е. Технические) причины, почему это невозможно в текущем С++?