то следующее корректно:
auto lambda{ [](int* p){ delete p; } };
std::unique_ptr<int, decltype(lambda)> u_ptr{ new int{}, lambda };
?
Ок, спасибо
а без decltype(lambda) не работает? типы шаблона компилятору явно указывать не стоит — он сам точнее их выведет. хотя это требует 17 стандарта в вашем случае
Не выведет для unique_ptr, у него нет CTAD
Не знал про CTAD до этого. Погуглив, узнал, что с 17 стандарта параметры шаблонов классов могут быть выведены с аргументов передаваемых в конструктор, но не всегда. А как в уник_птр определяется есть у него эта опция или нет?
Стандартом определяется
CTAD явно запрещено для некоторых его конструкторов http://eel.is/c++draft/unique.ptr.single.ctor#6 http://eel.is/c++draft/unique.ptr.single.ctor#11 или смотрите на части since C++17 здесь: https://en.cppreference.com/w/cpp/memory/unique_ptr/unique_ptr
Обсуждают сегодня