std::unique_ptr::operator->
имеет подпись
pointer operator->() const noexcept;
Итак, operator->
является константой, но возвращает переменный указатель. Это позволяет использовать код:
void myConstMemberFunction() const
{
myUniquePtrMember->nonConstFunction();
}
Почему стандарт позволяет это, и каков наилучший способ предотвратить использование, как представлено выше?