Ключ здесь "[with int m = 1]
". Когда m
равно 1, вы получаете эти две «перегрузки»
void f(A<1> const& that) const requires 1 > 1 { }
void f(A<1> const& that) const requires 1 > 1 { }
Предложение «неудовлетворенные требования» не «объявляет» перегрузку. Это только делает перегрузку не участвующей в разрешении перегрузки. Перегрузка все еще объявляется, и в вашем случае вы получаете дважды одно и то же определение для m = 1
.
. Простой обходной путь - сделать подписи разными, получая при этом две перегрузки
void f(A<m> const& that) const requires m > 1 { }
void f(A<1> const& that, int = 0) const requires m > 1 { }