As I understand it, const char* const doesn't guarantee that the pointer is the same every time you run the program, it just means the pointer and the data to which the pointer points can't be changed in the lifetime of the program.
constexpr const char* has the same effect of making the value unchangeable in every way from within the program, and (as far as I can tell) it also doesn't guarantee that the pointer is the same between runs of the program because that would contradict virtual memory starting point randomization, which wouldn't be possible if constexpr const char* made the same pointer every time.
The only difference is that constexpr const char*, when used as an arg for a constexpr function, results in a compile-time expression while const char* const, when used as an arg for a constexpr function, doesn't result in a compile-time expression. Why is that? Shouldn't the compiler be smart enough to be able to use both, since they mean the same thing, instead of enforcing this weird rule that seemingly does nothing?