Re[16]: C++ illegal instruction
От: rg45 СССР  
Дата: 20.08.25 18:09
Оценка:
Здравствуйте, B0FEE664, Вы писали:

R>>А тут уж без вариантов будет функция — не шаблон, не перегрузка и не функциональный объект. Вот если написать std::sin и std::cos, тогда получится облом.

BFE>Это почему?
BFE>Неужели старый трюк ухода от макроса
BFE>
BFE>a = (std::min)(a, b);
BFE>b = (std::max)(a, b);
BFE>

BFE>больше не легален?

Конечно легален. Только ты походу не совсем понял, о чём мы вели речь. Началось всё с выражения: (flag ? sin : cos)(x), в котором тернарный оператор вычисляется в указатель на функцию. Потом мы плавно перешли к следующему: допустим у нас есть выражение, имеющее вид функционального вызова f(...). Вопрос: в каких случаях имя f преобразуется в указатель на функцию? Из std::min и std::max ты не получишь указатели на функции и выражение вида (flag ? std::min : std::max)(a, b) тоже не напишешь, хоть со скобками, хоть без, потому что это имена шаблонов, да ещё и перегруженных. Впрочем сишные min/max также не преобразуются в указатели на функции, т.к. это имена макросов. А вот сишные sin/cos преобразуются в т.ч. и в C++.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 20.08.2025 18:36 rg45 . Предыдущая версия . Еще …
Отредактировано 20.08.2025 18:28 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:27 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:25 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:11 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:10 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.