Почему этот код компилируется (С++ 11) без ошибки несоответствия типа?
std::vector<char> p = {"abc", "def"};
"abc" и "def" не являются char, почему компилятор не дает мне ошибку об этом несоответствии типа?
Ответ 1
Вы не вызываете vector конструктор, который принимает initializer_list<char>. Этот конструктор не является жизнеспособным, потому что, как вы сказали, вы не передаете список char.
Но vector также имеет конструктор, который принимает итераторы в ряд элементов.
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
К сожалению, этот конструктор соответствует, потому что два аргумента будут каждый неявно преобразовывать в char const *. Но ваш код имеет неопределенное поведение, поскольку начальные и конечные итераторы, передаваемые конструктору, не являются допустимым диапазоном.