Я хочу объявить std::unique_ptr
с пользовательским средством удаления, которое связывает некоторые аргументы с конкретной функцией:
using namespace std::placeholders;
using HandleDeleter = std::invoke_result_t<std::bind, _1, SOME_FLAG>; // !!!
using HandlePtr = std::unique_ptr<handle_t, HandleDeleter>;
void handle_destroy(handle_t *, int flags);
handle_t * raw_handle;
auto deleter = std::bind(handle_destroy, _1, SOME_FLAG);
HandlePtr ptr(raw_handle, deleter);
И это не работает, потому что std::bind
является чудовищной конструкцией шаблона сама по себес неопределенным типом возврата.
Как правильно объявить HandleDeleter
в моем случае?