On 01/14/2016 10:17 AM, anonymous wrote:
On 14.01.2016 15:25, Byron Heads wrote:
I got burned by this yesterday, this code should not compile

import std.experimental.logger : trace;


void foo() {
     import std.net.curl : trace;
     trace("hello");
}


void main() {
     foo();
}

I don't see a problem with that specific code. You're explicitly
importing `trace` from std.net.curl, so it can't be surprising that it's
called.

But change one little detail and this qualifies as hijacking, I think:

----
void foo() {
     import std.net.curl; /* not mentioning trace */
     trace("hello");
}
----

Imagine that std.net.curl didn't have a `trace` function when the code
was written. std.experimental.logger.trace would have been called then.
When a `trace` function is then added to std.net.curl, the code suddenly
calls a different `trace`, without any warning. Hijacking.

Yes, this needs to be fixed. -- Andrei

Reply via email to