Здравствуйте, VTT, Вы писали:
__>> int get_foo(const std::unique_ptr<const int>& v)const;
VTT>На редкость безобразная конструкция. Голые указатели и передача ссылок на неизменяемые умные указатели — это как раз тот самый "smelly code".
VTT>В такой ситуации лучше передавать int const &.
возможно, вы правы в плане, что передача неизменяемых объектов должна идти не по указателю, а по ссылке на сам объект, но есть же случаи, когда это неудобно, например
TNode* next(TNode* p){ return p->m_pNext;}
const TNode* next(const TNode* p){ return p->m_pNext;}
VTT>Если же передаваемое значение потенциально может быть еще не создано (т.е. в unique_ptr хранится nullptr), то тогда имеет смысл передавать optional_reference< int const >
ага, городить optional_reference, вовлекая сторонние библиотеки и усложняя семантику, это, конечно, красиво.