а вот gcc/clang требуют еще и определение? Это какая-то часть impl specified?
И MSVC не может... А вообще, каков сценарий использования?)
сценария нет, мне надоело что один код собирается под msvc и не собирается под clang
Скорее всего они не могут найти деструктор, потому тебе нужно снабдить уник кастомным делитером, определение которого будет делать delete
да, кастомный делитер и не могут найти но это не отменяет первого сообщения
И что имеется ввиду под объявлением? Предварительное объявление?
Или вынести деструктор класса с pimpl в cpp
ага, forward declaration
Тогда всё верно, шаблон уника не может инстанцировать delete ptr, где-то в своих недрах, поскольку не видит объявления деструктора
и как же тогда msvc его инстанцирует интересно...
Какая-то магия, не факт, что валидная с т.з. стандарта
вот можно как-то убрать эту магию? она мне не нравится
Сурсы деструктора уник_птр посмотри
У меня как-то не инстанцирует. Можно минимально воспроизводимый пример?
Просто засунь в уник кастомным делитер который определён рядом с реализацией класса, либо если этот юник у тебя в классе живёт, объяви у класса деструктор, а в реализации определи его пустым ио таким каким тебе надо, но не факт, что это поможет
https://github.com/Jihadist/ForwardDecl-SmartPtr например вот
не помогло если что
Обсуждают сегодня