Предупреждение: игнорирование атрибутов в аргументе шаблона ... в объявлении std :: unique_ptr (-Wignored-attributes) - PullRequest
1 голос
/ 16 июня 2020

Использование объясненного шаблона здесь следующим образом:

auto action = 
  std::unique_ptr< posix_spawn_file_actions_t, decltype(&posix_spawn_file_actions_destroy) > 
  { new posix_spawn_file_actions_t(), posix_spawn_file_actions_destroy };

запускает [-Wignored-attributes] в g cc v10.1.0 -std=c++20:

warning: ignoring attributes on template argument ‘int (*)(posix_spawn_file_actions_t*) noexcept’
|         std::unique_ptr<posix_spawn_file_actions_t, decltype(&posix_spawn_file_actions_destroy)>
|                                                                                                ^

Почему? Следует ли его игнорировать или есть возможность изменить код?

1 Ответ

1 голос
/ 16 июня 2020

Это говорит о том, что вы игнорируете тот факт, что указатель на функцию не генерирует.

В вашем коде есть другие ошибки, такие как создание указателя, который не очищается с помощью удаления.

В или более поздней версии я использую

template<auto x> using kval_t=std::intergral_constant<std::decay_t<decltype(x)>,x>;
template<auto x> constexpr kval_t<x> kval={};

Тогда вы можете:

auto action = 
  std::unique_ptr< posix_spawn_file_actions_t, kval_t<posix_spawn_file_actions_destroy> >  =
     { new posix_spawn_file_actions_t() };

но new здесь, вероятно, неправильный способ создания posix_spawn_file_actions_t.

Это сохраняет указатель функции в константе времени компиляции и может избавиться от этого предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...