On Wednesday, 28 January 2015 at 13:30:17 UTC, Benjamin Thaut
wrote:
On Wednesday, 28 January 2015 at 11:42:19 UTC, Dicebot wrote:
2) first proposed solution does not allow to mark private
functions as "export". It implicitly exports those if they are
needed for actual public/export template function to work.
This is not the same - those functions still can't be called
via provide .di binding, it simply keeps them available for
linking.
So you would prefer to keep symbols private and just make them
available for linking? Or what exactly is the message here?
Isn't that what your first proposed solution is about? That was
my understanding and I liked that understanding :) To be 100%
clear :
export void foo(T : int)(T x)
{
bar(x);
}
private void bar(int x) { }
I'd expect `bar` to be exported into resulting binary so that it
can be linked against by any users of `foo` but for any attempt
to call `bar` directly from D code to fail because of protection
violation. If someone wants to circumvent protection by forging
mangling - shooting own feet is allowed.