Open IMMZ opened 1 year ago
Намного важнее было бы иметь такой qualifier. Уже есть 3 предложения про чистые функции, но не в одном из них нет предложения о квалификаторах. Простой пример: половина алгоритмов имеет неопределенное поведение при мутабельных (не чистых) функторах. И эту распространенную ошибку можно было бы предупредить на этапе компиляции. Огромный класс распространенных ошибок в многопоточном программировании тоже можно было бы избежать имея такой квалификатор.
Может атрибуты [[reproducible]] и [[unsequenced]] из C23 как раз то что нужно. Мне кажется они и в C++ должны попасть.
Наряду с аттрибутами [[likely]] и [[unlikely]] было бы неплохо добавить аттрибут [[pure]], чтобы указать, что функция чистая, т.е. не имеет побочных эффектов. Это могло бы помочь компиляторам с оптимизацией.
Пример: [[pure]] int sum(int a, int b) { return a + b; }