Clang-Tidy Bugprone-Use-After-Move с идеальной пересылкойC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Clang-Tidy Bugprone-Use-After-Move с идеальной пересылкой

Сообщение Anonymous »

Код: Выделить всё

clang-tidy
Сообщает следующий кусок кода в качестве ошибки, используя-user-move

Код: Выделить всё

template 
auto transform_tuple_impl(F&& f, Tuple&& tuple, std::index_sequence)
{
return std::make_tuple(f(std::get(std::forward(tuple)))...);
}

template 
auto transform_tuple(F&& f, Tuple&& t)
{
constexpr size_t size = std::tuple_size::value;
return transform_tuple_impl(std::forward(f), std::forward(t), std::make_index_sequence{});
}
< /code>
С этим сообщением: < /p>
error: 'tuple' used after it was forwarded [bugprone-use-after-move,-warnings-as-errors]
|             return std::make_tuple(f(std::get(std::forward(tuple)))...);
|                                                                      ^
note: forward occurred here
|             return std::make_tuple(f(std::get(std::forward(tuple)))...);
|                                      ^
note: the use and forward are unsequenced, i.e. there is no guarantee about the order in which they are evaluated
|             return std::make_tuple(f(std::get(std::forward(tuple)))...);
|                                                                      ^
Я использую C ++ 14, так что std :: get должен иметь перегруженного оператора для ссылки на RVALUE. Будет ли способ обеспечить соблюдение порядка оценки? Это ложный положительный?

Подробнее здесь: https://stackoverflow.com/questions/796 ... forwarding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»