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