Проверка, что один concept специализированнее другого

Andrey Davydov
Andrey Davydov

Добавить в язык "concept trait" __subsume(...) ожидающий 2 (альтернативный вариант: >= 2) концепта. Аналогично уже имеющимся во всех популярных компиляторах (но не стандартизированным) type traits __is_final, __is_base_of, __is_constructible, __is_convertible, и т.д.

Пример использования:

template<typename It> concept InputIterator = ...;
template<typename It> concept ForwardIterator = ...;
template<typename It> concept BidirectionalIterator = ...;
template<typename It> concept RandomAccessIterator = ...;

static_assert(__subsume(ForwardIterator, InputIterator));
static_assert(__subsume(BidirectionalIterator, ForwardIterator));
static_assert(__subsume(RandomAccessIterator, BidirectionalIterator));

// альтернативный подход:
static_assert(__subsume(RandomAccessIterator,
                        BidirectionalIterator,
                        ForwardIterator,
                        InputIterator));

Поддержать __subsume на стороне компилятора очень просто -- упорядочивание концептов это операция которая компилятору в любом случае нужна.

Синтаксис "__subsume(...)", возможно, не самый удачный, так как в данный момент нет прецендентов в стандарте C++, но de facto в популярных компиляторах уже есть builtin type traits, которые парсятся как выражения, так что добавить concept trait должно быть не сложно.

1
рейтинг
1 комментарий
yndx-antoshkka

Идея хорошая, но с ней придётся подождать. На данный момент функционал концептов для C++20 определён (идут разговоры о terse syntax, это наверное последнее что смогут добавить к C++20).

Надо дождаться C++20, и уже тогда приниматься за proposal.

yndx-antoshkka
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения