array literal in C++

```
int main() {
    int m1[2][2] = {{1, 2}, {3, 4}};
    return 0;
}
```
Array literal can only be used in initializers.
```
int arr[4];
arr = {0, 1, 2, 3}; // Error
```
When you write
```
int arr[4];
```
from that moment on, every time you use arr in a dynamic context, C considers arr to be &arr[0], namely the decay of an array to a pointer. Therefore:
```
arr = (int[]){0, 1, 2, 3};
```
is considered to be,
```
&arr[0] = (int[]){0, 1, 2, 3};
```