No, non-const temporaries are allowed to be modified, provided you go about it the right way. There are a few idioms that actually rely on it. Ex: the vector remove storage idiom
std::vector<Something>().swap(myVector); // clear and remove storage
std::vector<Something>(myVector).swap(myVector); // shrink capacity
When you get to C++11, you have rvalue references which are used to implement move semantics. Things like move constructors will also (usually) modify temporaries.
I knew somebody would point out that they aren't really const and even wondered if I should stick with "r-value" and drop the overly simple "const". But once you get into details about reference binding and how references must be const while calling non-const functions is perfectly fine, you start wondering "what the heck where they thinking?". While r-value references are a great tool, they are also great at completely confusing people and then you might have to get into even more detail to answer the inevitable question of "why not just allow non-const references?".
Side note: shrink_to_fit has finally put an end to the awkward swap-workaround (I can't myself to call it "idiom", simply because it kind of suggests that it was the intended method of doing it).