Hi,

I was just refactoring a project to compile under 2.067.

The fixes themselves were trivial: just adding "import std.traits;" to some files. Apparently its pieces were publicly imported by another module in 2.066. So, it's the right fix anyway.

Understanding what happened, however, took more time than fixing. Surely, the compiler couldn't just say "hey, I know, you forgot to import std.traits!", and threw some distant consequences at me instead. Essentially, there were two complications:

1. In a complex template constraint, if some identifier disappears out of scope, the whole constraint silently fails, and the whole template instantiation fails with a rather generic error message.

2. When the compiler could not find a suitable overload of a function, if there are template and non-template overloads, it lists only non-template overloads.

My question therefore is: can the process be improved somehow to address the above issues? For the former problem, is there a tool which jumps out and tells you use Phobos without importing things properly, or suggests a Phobos import by the name of the stuff. For the latter one, I wonder if this is the intended behavior.

Ivan Kazmenko.

Reply via email to