(Примечание: предполагается, что это language-lawyer, я не имею в виду каких-либо конкретных существующих компиляторов.)
Когда, если вообще когда-либо, компилятор разрешает ухудшать временную сложность программы?
При каких обстоятельствах (если таковые имеются) это считается "наблюдаемым поведением" и почему?
(Например, может ли компилятор юридически "сократить" программу с полиномиальным временем до экспоненциального времени?)
Если ответ отличается в C и С++ или в разных версиях, то объясните, пожалуйста, различия.