LINUX.ORG.RU

История изменений

Исправление Dendy, (текущая версия) :

дружественнее было бы вставить туда builtin_trap

Что нарушило бы логику работы программы, согласно которой переменная Do всегда инициализирована EraseAll, когда доходит до её вызова. Если бы было иначе, то программист бы изначально написал программу как-то так: static Function Do = [](){ std::abort(); }. С какого перепугу компилятор будет неявно лезть корректировать логику работы программы, раздувать и замедлять код? Максимум что он должен себе позволять это показать ошибку на этапе компиляции, заставив разработчика явно исправить свой код таким образом, чтобы он соответствовал одному из вариантов: либо проинициализировать Do=abort, как предлагают одни, либо Do=EraseAll как следует из описания стандарта, либо ещё что-то, что разработчик держал в уме, но забыл дописать.

Исходная версия Dendy, :

дружественнее было бы вставить туда builtin_trap

Что нарушило бы логику работы программы, согласно которой переменная Do всегда инициализирована EraseAll, когда доходит до её вызова. Если бы было иначе, то программист бы изначально написал программу как-то так: static Function Do = [](){ std::abort(); }. С какого перепугу компилятор будет неявно лезть корректировать логику работы программы, раздувать и замедлять код? Максимум что он должен себе позволять это показать ошибку на этапе компиляции, заставив разработчика явно исправить свой код таким образом, чтобы он соответствовал одному из вариантов: либо проинициализировать Do=abort, как предлагают одни, либо Do=EraseAll как следует из описания старндарта, либо ещё что-то, что разработчик держал в уме, но забыл дописать.