On Wednesday, 27 September 2017 at 23:24:58 UTC, user1234 wrote:
On Wednesday, 27 September 2017 at 21:01:36 UTC, Jesse Phillips wrote:
On Wednesday, 27 September 2017 at 16:35:54 UTC, DreadKyller wrote:
My question is about overloading, several operators can be overloaded in D, one of the ones that can't apparently is the address of operator (&object). My question is have I simply missed it or does it actually not exist, and if it's not overloadable, is there any reason why this was decided? Because there's been numerous times that it'd be useful to me, just recently with how much I use the operator because of OpenGL I decided to ask.

My answer is that & is a defined operation on all addressable memory. Unlike other operators which don't exist until you "overload" them.

Yes but the dereference operator can be overloaded. The reasoning doesn't stand, unless that's recognized as an inconsistency.

Except that no it actually doesn't. The Unary operator * doesn't overload the dereferencing of a pointer, take the following code:

class Test
{
        Test opUnary(string s)() if (s == "*")
    {
                writeln("Overloaded operator called");
                return this;
    }
}
void testFunc()
{
        Test test = new Test();
        Test* test_ptr = &test;
        writeln("== *test ==");
        Test other = *test;
        writeln("== *test_ptr ==");
        other = *test_ptr;
        writeln("== end ==");
}

This outputs:

== *test ==
Overloaded operator called
== *test_ptr ==
== end ==

Notice how dereferencing the pointer did not call the overloaded function, because a pointer to Test is not the same type as a Test.

Reply via email to