Аргумент std:: forward не должен использоваться впоследствии
Аргумент std:: forward впоследствии не используется.
Как правило, используется std::forward в шаблоне функции для передачи ссылочного параметра переадресации другой функции. Ресурсы параметра могут быть переданы другому объекту посредством операции перемещения в зависимости от категории значения параметра.
Для параметра rvalue параметр находится в неопределенном состоянии, если он перемещен из после вызова в std::forward и его не следует использовать повторно.
Для параметра lvalue при повторном использовании параметра после вызова std::forward, изменения параметра могут повлиять на аргумент вызывающей функции, которой передается параметр.
Polyspace ® помечает вызов std::forward если переадресованный объект используется повторно после вызова. Polyspace также выделяет строки, в которых пересылаемый объект повторно используется в коде.
Polyspace не помечает вызов std::forward если его аргумент повторно используется в ветви, которая не может быть достигнута после вызова std::forward. Например, в этом фрагменте кода ветвь, где повторное использование переменной t происходит не может быть достигнуто после того, как код входит в ветвь, где std::forward используется.
template<typename T>
void func(T&& t)
{
T&& p = t;
switch(t) {
case 0:
p = std::forward<T>(t);
break;
case 1:
t--; //t reused
break;
}
}
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Библиотека поддержки языка |
| Категория: Обязательно, Автоматизировано |