Явная инициализация вектора указателей приводит к преобразованию ошибка?

Учтите следующее:

std::vector<int*> v(1, 0);

Это прекрасно компилируется с VC++10 (без предупреждений даже при максимальном уровне предупреждений). Однако он не компилируется с помощью llvm на Mac или gcc на Linux, что приводит к ошибке типа «назначение int* из несовместимого типа const int». Я не ищу решений — я знаю, что второй параметр не нужен или что static_cast исправляет ошибку.

Я думал, что ноль можно неявно преобразовать в любой тип указателя. Что дает? Я могу сделать следующее:

int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;

Я понимаю, что сигнатура конструктора векторов принимает const T&, который при расширении для vectorстановится int* const&. ] правильный? Может ли кто-нибудь объяснить, что здесь происходит, и правильно ли компилятор VC++ или не-VC++?

9
задан Tabber33 4 April 2012 в 19:03
поделиться