Re: проблемы ленивой компиляции
От: rg45 СССР  
Дата: 25.12.23 14:03
Оценка: :)
Здравствуйте, Кодт, Вы писали:


К>Но хотелось бы понять: такое энергичное поведение компилятора с if constexpr и requires — это так и задумано, или это какие-то неочевидности / недоделки / дефекты стандарта?


Ну вообще, написано, что неиспользуемая ветка должна быть отброшена (discarded):

https://timsong-cpp.github.io/cppwp/stmt.if#2

If the if statement is of the form if constexpr, the value of the condition is contextually converted to bool and the converted expression shall be a constant expression ([expr.const]); this form is called a constexpr if statement. If the value of the converted condition is false, the first substatement is a discarded statement, otherwise the second substatement, if present, is a discarded statement. During the instantiation of an enclosing templated entity ([temp.pre]), if the condition is not value-dependent after its instantiation, the discarded substatement (if any) is not instantiated. Each substatement of a constexpr if statement is a control-flow-limited statement


Там где-то еще говорится, что discarded ветви также не участвуют в выведении типа результата фунции, если тип результата объявлен с использованием auto.
--
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.