Open apolukhin opened 3 years ago
yndx-antoshkka, 9 октября 2018, 16:58 Идея хорошая, но с ней придётся подождать. На данный момент функционал концептов для C++20 определён (идут разговоры о terse syntax, это наверное последнее что смогут добавить к C++20).
Надо дождаться C++20, и уже тогда приниматься за proposal.
Перенос предложения: голоса +1, -0 Автор идеи: Andrey Davydov
Над концептами определен частичный порядок, который влияет на выбор лучшего кандидата в overload resolution, специализации класса и т.д. Правила сравнения концептов нетривиальны, так что читая код убедиться в уме, что P subsume Q довольны сложно, куда надежнее будет написать
static_assert(__subsume(P, Q))
.Добавить в язык "concept trait" subsume(...) ожидающий 2 (альтернативный вариант: >= 2) концепта. Аналогично уже имеющимся во всех популярных компиляторах (но не стандартизированным) type traits is_final, is_base_of, is_constructible, __is_convertible, и т.д.
Пример использования:
Поддержать __subsume на стороне компилятора очень просто -- упорядочивание концептов это операция которая компилятору в любом случае нужна.
Синтаксис "__subsume(...)", возможно, не самый удачный, так как в данный момент нет прецендентов в стандарте C++, но de facto в популярных компиляторах уже есть builtin type traits, которые парсятся как выражения, так что добавить concept trait должно быть не сложно.