«форвардные» параметры, объявленные как T & & должны всегда пересылаться
«форвардные» параметры, объявленные как T & &, всегда должны передаваться.
Поскольку ссылки rvalue не могут связываться с lvalues, функции, которые позволяют использовать семантику перемещения при помощи ссылок rvalue в их сигнатуре, не принимают lvalues. Эта проблема решается с помощью ссылки rvalue на объект типа неконстатного шаблона, который называется параметром «вперед». Эти параметры могут связываться как с rvalues, так и с lvalues при сохранении их cv- проверок и категорий значений. Параметры «forward» применяются, когда вы хотите переслать значение целевому объекту или функции при помощи функции std::forward
.
Когда вы объявляете шаблон функции с помощью параметра «Forward», не используйте параметр ни в каких операциях. Поскольку параметры «Forward» могут связываться как с lvalues, так и с rvalues, использование их в операции может повредить их проверки cv и категории значений. Переправьте эти параметры непосредственно в пункт назначения при помощи std::forward
без использования их в операции.
Polyspace® помечает параметр «Forward» в определении шаблона функции или выражения Лямбды, если любое из следующих условий верно:
Параметр «Forward» не пересылается адресату при помощи std::forward
.
Операция, отличная от переадресации, выполняется по параметру «Forward» или по представителю его объекта.
Polyspace игнорирует шаблоны и выражения Lambda, которые остаются неиспользованными в коде.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Деклараторы |
Категория: Необходимый, Автоматизированный |