C++ Logo

std-proposals

Advanced search

Re: Unify '.' and '->' operator behavior

From: Arthur O'Dwyer <arthur.j.odwyer_at_[hidden]>
Date: Sat, 15 Feb 2020 23:40:38 -0500
On Sat, Feb 15, 2020 at 11:10 PM J Decker <d3ck0r_at_[hidden]> wrote:

> On Sat, Feb 15, 2020 at 7:07 PM Arthur O'Dwyer <arthur.j.odwyer_at_[hidden]>
> wrote:
>
>> Hi Jim,
>>
>> Sadly your idea doesn't work in C++, because C++ has *member functions*.
>> That is, we can write things like this:
>>
>> struct Widget {
>> void reset(); // reset the widget
>> };
>> [...]
>> std::unique_ptr<Widget> p = std::make_unique<Widget>();
>> p->reset(); // reset the pointed-to widget by calling Widget::reset()
>> member function
>> p.reset(); // reset the pointer's own value to nullptr
>>
>>
> But, isn't the .reset() implemented on the unique_ptr<> template as a
> operator. override? which takes precedence over the default behavior...
>

No, C++ doesn't permit overloading the "." operator at all.
It's just that `p.reset()` calls `unique_ptr<Widget>::reset`,
and `p->reset()` calls `unique_ptr<Widget>::operator->` followed by
`Widget::reset`.

I think you'll have to learn more about how C++ currently works, before
working on proposals to change it.

–Arthur

Received on 2020-02-15 22:43:28