Thread overview
how can I ensure that a template instantiation is unique?
Jun 19, 2014
Vlad Levenfeld
Jun 19, 2014
Andrew Edwards
Jun 19, 2014
Andrea Fontana
Jun 19, 2014
Andrea Fontana
Jun 19, 2014
Vlad Levenfeld
June 19, 2014
I'm instantiating a couple of template structs that conflict with each other. I'd like them to be unique types, automatically. So I tried this:

template Foo (string unique_id = __FILE__~__LINE__.to!string)
{...}

but it didn't work. When I use this for templated functions, I get the file and line number where the function is instantiated. But in this case, I got the file and line number where the template was defined.

Is there anything I can do to make sure each instantiated type is unique?
June 19, 2014
On 6/19/14, 1:48 AM, Vlad Levenfeld wrote:
> I'm instantiating a couple of template structs that conflict with each
> other. I'd like them to be unique types, automatically. So I tried this:
>
> template Foo (string unique_id = __FILE__~__LINE__.to!string)
> {...}
>
> but it didn't work. When I use this for templated functions, I get the
> file and line number where the function is instantiated. But in this
> case, I got the file and line number where the template was defined.
>
> Is there anything I can do to make sure each instantiated type is unique?

I don't think you want to set a default value. If you pass "__FILE__~__LINE__.to!string" during instantiation, it works every time:

template Foo(string uniqueId)
{
	alias Foo = uniqueId;
}

void main()
{
	Foo!(__FILE__~__LINE__.to!string).writeln;
}
June 19, 2014
On Thursday, 19 June 2014 at 05:48:24 UTC, Vlad Levenfeld wrote:
> I'm instantiating a couple of template structs that conflict with each other. I'd like them to be unique types, automatically. So I tried this:
>
> template Foo (string unique_id = __FILE__~__LINE__.to!string)
> {...}
>
> but it didn't work. When I use this for templated functions, I get the file and line number where the function is instantiated. But in this case, I got the file and line number where the template was defined.
>
> Is there anything I can do to make sure each instantiated type is unique?

Maybe something like this:
http://dpaste.dzfl.pl/ce479a2f87f4
June 19, 2014
On Thursday, 19 June 2014 at 07:26:12 UTC, Andrea Fontana wrote:
> On Thursday, 19 June 2014 at 05:48:24 UTC, Vlad Levenfeld wrote:
>> I'm instantiating a couple of template structs that conflict with each other. I'd like them to be unique types, automatically. So I tried this:
>>
>> template Foo (string unique_id = __FILE__~__LINE__.to!string)
>> {...}
>>
>> but it didn't work. When I use this for templated functions, I get the file and line number where the function is instantiated. But in this case, I got the file and line number where the template was defined.
>>
>> Is there anything I can do to make sure each instantiated type is unique?
>
> Maybe something like this:
> http://dpaste.dzfl.pl/ce479a2f87f4

Of course Foo2 could be an enum :)
June 19, 2014
Thanks! Mixin strings can punch through anything.