Я хочу, чтобы компилятор проверял во время компиляции, что h (to) равен 0.
Это было бы возможно, только если компилятор смог вызвать h(to)
при компиляции время. Что не может, потому что нет никакой гарантии, что любая вызванная функция будет constexpr
. SelfType
может быть типом указателя на функцию, а указатели на функции не содержат constexpr
. И понятия не могут даже проверить, является ли что-то константным выражением или нет.
Когда вы начинаете задавать вопросы о том, отображаются ли значения в соответствующую область или функция отображает значения в область, это не так. больше не «концепция». Или, по крайней мере, это не концепт в смысле языковой характеристики.
То есть есть определенные вещи, когда мы считаем требованиями конкретного пользователя концепта, которые язык не может проверить. Библиотека концепций C ++ 20 полна этих аксиоматических c концептуальных требований.
Это также хорошая причина, почему вы должны использовать именованную функцию-член для своей эвристики, а не предполагать, что что-то, что имеет operator()
Перегрузка, которая так происходит при преобразовании целых чисел без знака в целые числа без знака, - это "heuristi c".