Como const auto e auto const se aplicam a ponteiros?

Eu estava tentando algum código e estou me perguntando como oconst qualificador em C ++ se aplica a tipos de ponteiros ao usarauto.

int main()
{
  int foo = 1;
  int bar = 2;

  //Expected: const int * ptr_to_const_int = &foo;
  const auto ptr_to_const_int = &foo;

  //Expected: int * const const_ptr_to_int = &foo;
  auto const const_ptr_to_int = &foo;


  *ptr_to_const_int = 3; //Thought this would error
  //ptr_to_const_int = &bar; This does error.
  *const_ptr_to_int = 3;

  return 0;
}

Percebo que há uma pergunta semelhante perguntando se são iguais. Estou perguntando mais especificamente qual é a regra aqui que está sendo aplicada à dedução do tipo de ponteiro final.

questionAnswers(1)

yourAnswerToTheQuestion