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.

Reply via email to