Функция, выбранная разрешением перегрузки, должна решить к функции, объявленной ранее в модуле перевода
Функция, выбранная разрешением перегрузки, должна решить к функции, объявленной ранее в модуле перевода.
В общем случае вы не можете вызвать функцию, прежде чем она будет объявлена, таким образом, вы ожидаете вызов функции решить к ранее заявленной функции. Однако в случае разрешения перегрузки вызова функции в шаблоне, этому ожиданию нельзя удовлетворить. Разрешение этой перегрузки происходит при инстанцировании шаблона, не при определении шаблона. Так, вызов может решить к функции, которая объявляется после определения шаблона и вывода к неожиданным результатам. Смотрите примеры ниже.
Чтобы удовлетворить ожиданию, что вызов функции всегда решает к ранее заявленной функции, объявите перегрузки функции до вызова его. В качестве альтернативы используйте оператор разрешения области видимости ::
или круглая скобка, чтобы явным образом вызвать определенную ранее заявленную функцию и обойти механизм разрешения перегрузки.
Средство проверки отмечает вызов функции или оператора в определении шаблона функции, если функция или оператор объявляются после определения шаблона.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: шаблоны |
Категория: необходимый |