Я думаю, что могу сформулировать это намного проще. Когда footype
не является параметром шаблона:
const footype &
в подписи является гарантией для абонента
функция и ограничение для реализатора функции.
const footype
, с другой стороны, является только ограничением для
реализатор и не имеет отношения к вызывающему.
Если footype
является параметром шаблона, то правила могут быть проверены только в отношении отдельных экземпляров шаблона.
Кстати, если вы видите константные ограничения, то подключенный код намного легче читать, потому что возможности того, что код может сделать, сильно ограничены. Это одна из многих причин, почему C ++ легче читать, чем C # или Java.