Что такое vector<int,int>
Второй шаблонный аргумент std::vector
- это распределитель, так что это вектор, распределитель которого имеет тип int
.
Это даже верно?
Нет.int
не удовлетворяет требованиям распределителя.
, если нет, почему я могу объявить его ??
Хорошо, создание шаблона по крайней мере с двумяАргументы шаблона, содержащие не более двух аргументов шаблона, которые не имеют значения по умолчанию, использующего два аргумента типа, корректны.До тех пор, пока вы не попытаетесь использовать распределитель, у вас может возникнуть проблема с правильной формой.
Нет способа выразить на языке, что аргумент шаблона должен удовлетворять определенным свойствам, а стандартная библиотека не 'такого принуждения тоже нет.Функцию Concepts , предложенную для введения в будущий стандарт C ++, можно использовать для обеспечения (некоторых) таких требований, и, возможно, контейнерам также потребуется использовать концепции в будущем.
Если ваш экземпляр шаблона не соответствует требуемой спецификации стандартного контейнера, стандарт не требует, чтобы компилятор диагностировал ошибку.Процитируем последний стандартный черновик:
[res.on.functions]
В некоторых случаях (функции замены, функции-обработчики, операции над типами, используемыми для создания экземпляров стандартных шаблонных компонентов библиотеки),Стандартная библиотека C ++ зависит от компонентов, поставляемых программой C ++. Если эти компоненты не соответствуют их требованиям, этот документ не предъявляет требований к реализации.
В частности, эффекты не определены в следующих случаях:
- для типов, используемых в качестве аргументов шаблона при создании экземпляра компонента шаблона, если операции над типом не реализуют семантику применимого подпункта Требования ([allocator.requirements], [container.requirements], [iterator.requirements], [алгоритмы].requirements], [numeric.requirements]).Операции над такими типами могут сообщать об ошибке, вызывая исключение, если не указано иное.
Декларация может теоретически компилироваться, поскольку ограничений нет.В моей системе он не компилируется.