Closed kol65536black closed 2 years ago
Приблизительно с этого начинали прорабатывать текущие концепты C++20. Только вот при описании в виде класса сложно выразить такие вещи как "функция возвращает тип, преобразоввываемый к bool" или "свободная функция принимает тип X". Поэтому пришли к текущему виду концептов.
Для проверки соответствия класса концепту можно использовать static_assert и/или requires. При этом нет необходимости загромождать декларацию класса, делать проверку в хедере (точнее - в каждой единице трансляции, куда этот хедер подключатеся).
Если я правильно понял сказанное в первом абзаце, то предложенная идея (или похожая на предложенную) уже прорабатывалась и пришли к выводу, что она не годится в качестве универсального инструмента на все случаи жизни. Есть случаи, когда идея "не работает".
Отсюда делается вывод, что она так же не годится в роли более специализированного инструмента, дополняющего уже введенные в стандарт концепты.
Ох, ну ок. :(
Есть предложение добавить возможность прописывать концепты в месте где прописываем наследование.
При этом подразумевается, что компилятор должен проверить класс требованиям концепта. Если не соответствует концепту, то код не компилируется.
Так же думаю, был бы полезен способ описывать концепт в стиле трейтов или тайпклассов. Т.е. указать, что должны быть функции или поля с определенными именами. Пример: