От 1,9 "Выполнение программы:
соответствующие реализации требуются для эмуляции (только) наблюдаемого поведения абстрактной машины
и в информационной сноске:
Это положение иногда называют правилом «как будто», потому что реализация может свободно игнорировать любое требование этого международного стандарта, если в результате это требование будет выполнено, насколько это можно определить из наблюдаемое поведение программы. Например, фактическая реализация не должна оценивать часть выражения, если она может сделать вывод, что ее значение не используется и что не возникает никаких побочных эффектов, влияющих на наблюдаемое поведение программы.
Стандарт особо отмечает, что требование "как-будто" является обязательным для замещающей версии nothrow версии operator new()
. Тем не менее, как я читал, это требование попадет на программиста, переопределяющего operator new()
, а не на компилятор. Обратная сторона этой ответственности заключается в том, что я думаю, что стандарт в значительной степени требует, чтобы стандартная реализация nothrow operator new()
, предоставляемого библиотекой, должна была что-то делать по аналогии с вызовом throwing new
в try / catch и возвращать 0, если std::bad_alloc
пойман.
Где «как будто правило» могло бы проявиться здесь, если бы компилятор / компоновщик / все, что было достаточно умным, чтобы выяснить, что при использовании броска по умолчанию new()
, не бросание по умолчанию new()
может использовать ярлык, но если бросок по умолчанию new()
был переопределен, небросок по умолчанию new()
должен был бы действовать иначе. Я уверен, что это технически возможно для реализации (даже если вы, вероятно, не можете выразить это в стандартном C ++). Я был бы удивлен, если бы была когда-либо реализация, которая сделала бы это.
Возможно, я слишком много читаю в требовании, но я думаю, что это можно сделать вывод.