Совершенно законно построить std::vector
из пустого диапазона.Если first==last
, новый вектор не будет иметь элементов, и first
не будет разыменовываться.
Код, который у вас есть, четко определен и выполняет то, что вы ожидаете.
Поскольку указатель может использоваться в качестве итератора, это даже означает, что этот код четко определен (и возвращает ноль):
#include <vector>
int main()
{
int const* const p = nullptr;
std::vector<int> v(p, p);
return v.size();
}