The reason that the standard disallows you from doing this is a bit like a stupidity protection system - the compiler has no guarantee that the non-const variable will not be changed afterwards.
Originally Posted by unkownname
The "stupidity protection" is for people who might otherwise try something like this:
There may actually be other good reasons why the standard was written this way, but this is a good enough reason IMHO
// code to populate x goes here..
// "oh, i want to resize my array.. i'll just do this..."
x = 42;
// Bad, bad, bad..