I honestly don't know why they even have -> instead of just a dot like everyone else. The compiler knows whether it's a record, object, pointer, or any level of pointer to pointers.
It's important for objects that can be dereferenced. Smart pointers have methods that can be accessed with dot syntax like swap(). You can still dereference through a smart pointer using arrow syntax to access methods on the referenced type since they overload the operator->() method.
I love the arrow in functional programming. Some functional languages (like reasonml) has multiple arrow operators that did different things like this one -> would put the argument in the first position (a popular JS pattern) and the big arrow |> would put it last like most functional languages.
I know this is about CPP but honestly I love the way it looks, but I'm a weirdo lol
I pray for this to be real because it's the perfect syntactic sugar for C++. The kind that you'd think makes sense if you didn't have to write C++ for anything more complex than a high school project.
In two of your cases this operator is pretty shit because at some point you'll probably want to offset the access (this isn't a knock at you but at the feature).
This operator would only really be relevant to the last case which rarely comes up outside of infrastructure/library work (building a tool building tool) and usually those code bases are cautious to adopt new features too quickly anyways for portability.
I've done serious C++ work (not much in the past decade though) - while references are absolutely amazing and you essentially want to pass by const ref by default I think well written maintainable C++ should maybe have a dozen heap objects tops. C++ is a better language if you generally forget that pointers and bare arrays exist.
Just again - I think you're right and the fact that your list is only three things long (and arguably two of them would be misuses) is a pretty clear sign that this is an incredibly niche feature.
Mostly because at the lowest level of computing (machine code and CPU instructions), pointers are the only method (that I know of) of any kind of indirection.
At the lowest level, there are 2 types of references:
CPU registers
memory addresses (pointers)
Every higher level language feature for memory management (references, objects, safe pointers, garbage collection, etc) is just an abstraction over raw pointers
Pointers themselves are really just abstractions over raw integers, whose sole purpose is to index into RAM
With that in mind, pointers to pointers are a natural consequence of any kind of nested object hierarchy (linked lists, trees, objects with references to other objects, etc)
The only other kind of indirection would be self-modifying machine code (like a Wheeler Jump). But the computing world at large has nixed that idea for a multitude of reasons
New feature with terrible syntax. There are features of every language I choose not to use. As a C++ developer, I would choose not to use this syntax, so that my team can write better designed code. However, I am an oddball on my team for loving trailing return types. In peer review, the schlong operator i.e. ---> would only be used where it makes sense which should be nowhere.
Peer reviewing this seriously would require knowing more context. Instinct tells me MyClass**** is probably allocated from the heap. A possible reason for so many levels of indirection are jagged arrays. Maybe the function only gets the first element of each level of the arrays. The function name doesn't make that clear. This is poorly designed. Please re-design/re-write. I will happily review those changes. I expect unit tests to show example use cases.
I would suggest using a stack allocated array with sentinels for missing values to improve cache coherency. Without context, I assume looping over the jagged structure will be common. Loading more into cache should improve efficiency in loops, but benchmarks are required.
Wait... I should join the crowd. So I say, "down with C++" and up with some safe alternative. Maybe rust: https://github.com/Speykious/cve-rs.
Best i can imagine, this is what happens if you are terrified of smart pointers, but also want to make all object pointers scope specific. So at every layer of hierarchy, you have a unique reference to some partial implementation above and below it.
Honestly I struggle to imagine any real scenario where this would make sense... except maybe like some kind of insane recursive factory.