История изменений
Исправление 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 как следует из описания старндарта, либо ещё что-то, что разработчик держал в уме, но забыл дописать.