Why is `std::array`'s data type being instantiated differently here

```
using T = const int *;
std::array<T, 4> x = { &a, &b, &c, &d }; // name: class std::array<int const *,4>
x[0] = &c; // OK    : non-constant pointer
*x[0] = c; // Error : constant data

```

compared to here?

```
using T = int *;
std::array<const T, 4> x = { &a, &b, &c, &d }; // name: class std::array<int * const,4>
x[0] = &c; // Error : constant pointer
*x[0] = c; // OK    : non-constant data

```

This second case is equivalent to `const std::array<T, 4>` (constant pointers to non-constant data). 
If we use `const int *` directly: `std::array<const int*, 4>` we get first case behavior. 

So more precisely, why is `using T = int*; std::array<const T, 4>;` equivalent to `std::array<int*const, 4>` and not `std::array<const int*, 4>`?