nde está o comportamento indefinido ao usar const_cast <>?

Se eu fizer

const char* const_str = "Some string";

char* str = const_cast<char*>(const_str); // (1)

str[0] = "P"; // (2)

Onde (qual linha) exatamente é o comportamento indefinido?

Eu tenho procurado muito por isso no SO, mas não encontrei nenhuma resposta explícita e precisa (ou pelo menos nenhuma que eu pudesse entender

Também relacionado: se eu usar uma biblioteca externa que ofereça esse tipo de função:

// The documentation states that str will never be modified, just read.
void read_string(char* str);

Está tudo bem escrever algo como:

std::string str = "My string";

read_string(const_cast<char*>(str.c_str()));

Desde que eu tenho certeza queread_string() vaiNunc tente escrever parastr ?

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion