Не удается скомпилировать, потому что std::vector
требует, чтобы его T
было CopyAssignable . Независимо от его RHS, это утверждение не будет компилироваться:
vector<const char*[3]> v = { { "a", "b", "c" } }; // Error
так же, как это не скомпилируется:
std::vector<const char*[3]> v;
const char* charPtrArr[3] { "a", "b", "c" };
v.push_back(charPtrArr); // Error
Это всего лишь частный случай того факта, что массивы в стиле C не могут быть назначены , что продемонстрировано в коде напрямую с использованием static_assert
:
static_assert(std::is_copy_assignable<const char*[3]>()); // Error
или, в более общем смысле, я думаю:
static_assert(std::is_copy_assignable<int[]>()); // Error
Если вы действительно хотите, чтобы std::vector
массивов размера 3 содержал указатели char
, то это безошибочный способ C ++ 11:
vector<array<const char*, 3>> v = { { "a", "b", "c" }, { "d", "e", "f"} };