Интересный пример предварительной пессимизации (или несовершенства компиляторов, как посмотреть), инспирированный решением одного моего студента.



https://godbolt.org/z/qa59c5MM1



Тут очевидно, что функция double_area делает то же самое, что wicked_double_area (если раскрыть скобки). Мало того, весь контекст локальный и всё доступно для оптимизаций. Но и clang и gcc не справляются — в генерированном коде получается шесть умножений против двух.



Кто возьмётся исследовать что происходит?



#questions

#compilers