Problem with coupling shared object symbol visibility with protection
Benjamin Thaut via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jan 29 05:24:35 PST 2015
On Thursday, 29 January 2015 at 10:21:25 UTC, Walter Bright wrote:
> On 1/28/2015 5:19 AM, Benjamin Thaut wrote:
>> On Wednesday, 28 January 2015 at 11:01:09 UTC, Walter Bright
>> wrote:
>>
>>> The example had marked the template itself as 'export'. This
>>> raises the
>>> specter of which binary the template instantiation exists in.
>>>
>>
>> The export in this context actually means "export all
>> instanciations of this
>> template". And this is needed to avoid using -allinst
>> everywhere.
>
> The problem is what happens when the client side instantiates
> the template, which it must in order to use it.
Well if there already is a statically known instanciation it will
not instanciate it. (I didn't change that behvaior). The question
is what happens when you have something like this:
module a:
struct SomeTemplate(T){}
alias knownInstance = SomeTemplate!int;
module b:
SomeTemplate!int var1; // will use instanciation from a (unless
-allinst)
SomeTemplate!float var2; // will instanciate
alias knownInstance2 = SomeTemplate!uint;
module c:
SomeTemplate!uint var3; // will this use instaction from b? Or
instanciate itself?
I don't know enough about D's template implementation to answer
the question regarding c.var3. Depending on the answer to this
question I can answer what should happen if a export marked
template is instanciated outside of its module. (e.g. by the user)
Please also correct me if any of the above assumptions are
incorrect.
More information about the Digitalmars-d
mailing list