clang: ошибка: присвоение 'int (*) [y] [z]' из несовместимого типа 'int (*) [y] [z]' - PullRequest
5 голосов
/ 04 ноября 2019

Почему 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
$ 
...