I think point about `export` is important. Tying definition of
"API" to `export` instead of `public` fits much better definition
of those attributes (latter only guarantees symbol access, former
also ensures cross-binary availablity) and allows for more
explicit migration step (as `export` is widely underused right
now).
Also the issue you have pointed out about API templates that call
private functions is essentially same issue as Benjamin was
pointing out here :
http://forum.dlang.org/post/[email protected]
I can't propose good solution here right now but I do believe
those 2 problems need to be solved in one step.