cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
90 stars 0 forks source link

Callable noexcept'ness conversion #206

Open apolukhin opened 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +5, -0 Автор идеи: Antervis

Добавить type_traits и функции для преобразования noexcept'ness Callable объектов и их типов

В с++17 noexcept - часть типа Callable объекта. Соответственно, возможны ошибки компиляции или более медленные fallback'и (например, в STL) если в функцию, требующую Res(Args...)noexcept пытаться передать Res(Args...). Предлагаю добавить:

type_traits:

conversion functions:

constexpr /implementation-defined/ all_overloads = /implementation-defined/; - флаг для указания в качестве шаблонных параметров вышеназванных функций, см. ниже* Для объектов без перегруженного operator(), дополнительные шаблонные параметры указывать не нужно. Иначе, необходимо:

либо указать ...Args, с которыми вызывается operator(Args...), и результатом будет объект/тип объекта, одна из перегрузок operator() которого поменяет noexcept'ness

либо передать в шаблон all_overloads - вернет объект/тип объекта, все перегрузки operator() которого поменяют noexcept'ness

Вроде как всё это реализуемо в рамках c++17. Разве что all_overloads версии через шаблонную рекурсию

apolukhin commented 3 years ago

yndx-antoshkka, 2 августа 2017, 15:29 Отличная идея! Желающие заняться ей - пишите, тут надо будет прежде всего обсудить с автором библиотеки https://github.com/boostorg/callable_traits , у него уже есть предложенные вами вещи http://boostorg.github.io/callable_traits/doc/html/index.html

Antervis, 7 августа 2017, 6:01 yndx-antoshkka, получается, надо реализовать conversion functions, попробовать просунуть их в буст, а там как пойдет?

yndx-antoshkka, 7 августа 2017, 18:11 Antervis, Библиотека https://github.com/boostorg/callable_traits уже почти принята в Boost и её хотят перетащить в стандарт С++.

Начать стоит с того, что убедиться что всё необходимое есть в этой библиотеке http://boostorg.github.io/callable_traits/doc/html/index.html

Если чего-то не хватает - попробовать добавить через pull request Если уже всё необходимое есть - либо маякнуть чтобы я познакомил вас с разработчиком библиотеки, либо самому связаться с автором библиотеки и предложить ему свою помощь с продвижением в стандарт.

Antervis, 8 августа 2017, 5:48 yndx-antoshkka, в этой библиотеке есть преобразования типов, но отсутствуют функции преобразования самих callable объектов