Здесь слишком много проблем, и я не могу сказать, в чем проблема ...
В C ++ constexpr означает, что значение должно быть доступно во время компиляции. const, с другой стороны, просто означает, что данные неизменяемы.
Не используйте здесь constexpr. Это не имеет никакого смысла. Фактически, даже если ваша функция возвращает const, не имеет смысла! Функции void ничего не возвращают и ни при каких обстоятельствах не должны уточняться с помощью const или constexpr. Функции constexpr предназначены для случаев, когда вы хотите оценить вычисления между примитивными типами данных (например, int, float, char) во время компиляции, а входные данные также должны быть constexpr.
primes
здесь не указано, кстати ... это опечатка?
Кстати, вы не должны инициализировать .crend () ни для чего. Вместо этого вы должны использовать .crbegin ().
const std::vector<uint64_t>&
не является константной ссылкой, это ссылка на константный вектор. И технически все ссылки являются константными ...