On 12/21/2013 10:22 PM, H. S. Teoh wrote:
I was pretty upset when I encountered the following situation:---std/regex.d--- ... private struct Stack { ... } ... ---mymodule.d--- ... /* public */ struct Stack { ... } ... ---main.d--- import std.regex; import mymodule; Stack s; // compile error: 'Stack' is ambiguous I find it unacceptable that introducing a *private* symbol to std.regex will break existing code (std.regex.Stack wasn't there in earlier versions of Phobos). Since std.regex.Stack is private, why would it even be in *any* overload set when compiling main.d??! This is leaky abstraction at its best: changing the implementation of a module without changing its API can randomly break user code due to newly-introduced private symbols clashing with user-defined symbols.
Yes, this is the big issue that we try to address with DIP22. Happened to me too when I added a private `abs` helper to core.time which then caused conflicts somewhere else in phobos.
