Почему clang (9.0.0) не может скомпилировать этот код? GCC (9.2.0) не имеет проблем с этим.
Использование typedef int arr[y][z]; arr *a;
или auto a = ...
работает нормально, но использование встроенного типа дает странное сообщение об ошибке error: assigning to 'int (*)[y][z]' from incompatible type 'int (*)[y][z]'
. Эти типы выглядят довольно совместимыми для меня. Возможно ли, что два разных типа имеют одинаковый синтаксис?
#include <iostream>
int main() {
int x, y, z;
std::cin >> x >> y >> z;
int (*a)[y][z];
a = (int(*)[y][z]) new int[x * y * z];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
for (int k = 0; k < z; k++) {
std::cin >> a[i][j][k];
}
}
}
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
for (int k = 0; k < z; k++) {
std::cout << a[i][j][k];
}
std::cout << std::endl;
}
std::cout << std::endl;
}
delete[] a;
return 0;
}
$ clang++ code.cpp -o code
code.cpp:9:6: error: assigning to 'int (*)[y][z]' from incompatible type 'int (*)[y][z]'
a = (int(*)[y][z]) new int[x * y * z];
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
$ g++ code.cpp -o code
$