Здравствуйте, vdimas, Вы писали:
_>>Кстати, в библиотеки алгоритмов D static if частенько используется для оптимизации. Типа есть универсальная версия алгоритма для диапазона с последовательным доступом и местами её ускорение, если переданный диапазон поддерживает произвольный доступ. V>Ну, в плюсах тоже оптимизатор может выкинуть лишний код, но! Этот выкинутый код всё-равно будет валидным.
Это не те оптимизации. В случае описанных мною не получится делать валидный код в двух вариантах (потому что у контейнера с последовательным доступом тупо нет метода [] — не скомпилируется). В текущем C++ подобное делалось просто двумя вариантами функции. Это в принципе нормальное рабочее решение (и даже как ты и говорил в чём-то более ясное). Однако в случае значительного объёма одинакового кода в обоих вариантах это приводит к обширной копипасте и раздуванию исходника.
V>А в твоём примере одна из выкидываемых частей ф-ии получается невалидной, потому что нельзя одновременно вернуть *t и t. Я это имел ввиду, когда говорил про "режет глаз".
Угу, я потому и привёл именно этот пример, т.к. он демонстрирует главное отличие от обычного рантаймового if. )