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