Есть ли предложение унифицировать классификаторы типов функций и упростить отвратительные типы функций? - PullRequest
4 голосов
/ 11 февраля 2020

отвратительные типы функций комбинаторные могут быть настоящей болью при работе с шаблоном, основанным на сопоставлении типов функций (см. std :: is_function ).

Разные квалификаторы включая const, volatile, &, &&, noexcept (плюс поддержка аргументов variadi c) может привести к большому числу специализаций шаблонов.

Однако спецификатор noexcept позволяет использовать логическое выражение noexcept(expr):

  • noexcept эквивалентен noexcept(true) по умолчанию

Итак, в будущем мы можем представить унификацию всех квалификаторов с этой моделью: * Квалификатор 1019 *

  • const будет эквивалентен const(true)
  • volatile Квалификатор будет эквивалентен volatile(true)
  • & Квалификатор будет эквивалентен &(true)
  • && квалификатор будет эквивалентен &&(true)

И, благодаря глазурью на торте, сделайте классификаторы вычитаемыми, чтобы иметь возможность писать что-то вроде:

template <typename Fn>
struct function_traits;

template <typename R, bool CQ, bool VQ, bool LVRQ, bool RVRQ, bool NEQ, ARGS... Args>
struct function_traits<R(Args...) const(CQ) volatile(VQ) &(LVRQ) &&(RVRQ) noexcept(NEQ)>
{
    static constexpr bool is_const_qualified = CQ;
    static constexpr bool is_volatile_qualified = VQ;
    static constexpr bool is_lvalue_ref_qualified = LVRQ;
    ...
};

Хотелось бы услышать любые мысли о таких вопросах.

1 Ответ

2 голосов
/ 11 февраля 2020

Я уже делал подобное предложение в списке рассылки std-предложения. Смотрите темы здесь и здесь .

Вывод из этого обсуждения состоял в том, что добавление такой функции в язык было бы большой работой. Мало того, что будет необходимо добавить правила к языку для вывода логических аргументов в квалификаторы, но также будет много других проблем, таких как точка, в которой создаются и оцениваются классификаторы. Предложение такого размера также может привести к появлению многих других проблем, которые необходимо решить.

Гашпер Ажман, по-видимому, полагал, что некоторая форма "вычисленного удержания" будет альтернативным решением проблемы, которая было бы более целесообразным. Если вы заинтересованы в том, чтобы помочь с этими усилиями, я бы предложил связаться с ним.

...