Рассмотрим пример, в котором я хочу создать массив массивов bool
:
int main() {
using type = bool[1];
bool a1[1] = {true};
bool a2[1] = {true};
bool a3[1] = {true};
type block_types[3] = {{a1}, {a2}, {a3}};
}
Этот код компилируется для Clang 7.0.0 , GCC 8.2 и MSVS v19.16 .
Теперь давайте изменим bool
на int
:
int main() {
using type = int[1];
int a1[1] = {1};
int a2[1] = {1};
int a3[1] = {1};
type block_types[3] = {{a1}, {a2}, {a3}};
}
Теперь код перестает компилироваться на любом изэти компиляторы с ошибками, похожими на:
error: invalid conversion from 'int*' to 'int' [-fpermissive]
type block_types[3] = { {a1}, {a2}, {a3}};
^
Примечание: это точное сообщение об ошибке исходит из GCC 8.1.
Почему это так?Почему bool[]
с трактуются иначе, чем int[]
с?Что за этим стоит?