Например, предположим ради аргумента, что найдена более эффективная (хранение, операции над ним) реализация для вектора целочисленных типов (по сравнению с универсальной реализацией вектора). Может ли стандартная соответствующая библиотека сделать что-то вроде:
template <class T, class A, class Enable = void>
class vector { ... };
template <class T>
class vector<T, A, std::enable_if_t<std::is_integral<T>::value>> { ... };
Я думаю, что это было бы незаконно из-за дополнительного параметра шаблона.
Но как насчет небольшого волшебства компилятора: (помимо дополнительной работы по реализации) будет разрешено что-то вроде этого:
vector<integral_type, A>
для внутреннего сопоставления сclass vector_integral<T, A>
в то время какvector<anything_else, A>
для внутреннего сопоставления сclass vector<T, A>
.
— очевидно, речь не идет о специализациях, явно упомянутых в стандарте, например std::vector<bool>
— очевидно, что специализация будет иметь такой же интерфейс и наблюдаемое поведение.
- Давайте проигнорируем concepts
, так как они еще не являются стандартными. Если только у вас нет фактов.
— это чисто академический вопрос (читай личное любопытство).