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