Семантика указателя C++. Почему operator-> не возвращает указатель как положено
class Foo
{
public:
void foo() const { std::cout << "foo" << std::endl; }
};
template <class T>
class UniqPtr
{
private:
T* ptr_;
public:
UniqPtr(T* ptr) : ptr_(ptr) {}
T* operator-> () { return ptr_; }
~UniqPtr() { delete ptr_; }
};
int main()
{
UniqPtr<UniqPtr<Foo>> q(new UniqPtr<Foo>(new Foo()));
(q->)->foo(); // ERROR
}
Почему я не могу сделать так? Это же вроде логично...
Источник: Stack Overflow на русском