直感に頼るからいけない
俺は左から型に演算していくと理解してる


int const * const & a;

(((((int) const) *) const) &) a;

intをconstにして、そのポインタ型をとって、それをconstにして、その参照型をとって、それにaという名前をつける

add_ref<add_const<add_ptr<add_const<int>::type>::type>::type>::type a;