template auto value

Jonathan Marler johnnymarler at gmail.com
Sat Mar 3 01:49:08 UTC 2018


On Saturday, 3 March 2018 at 00:20:14 UTC, H. S. Teoh wrote:
> On Fri, Mar 02, 2018 at 11:51:08PM +0000, Jonathan Marler via 
> Digitalmars-d wrote:
>> [...]
>
> Not true:
>
> 	template counterexample(alias T) {}
>
> 	int x;
> 	string s;
> 	alias U = counterexample!x;	// OK
> 	alias V = counterexample!1;	// OK
> 	alias W = counterexample!"yup";	// OK
> 	alias X = counterexample!s;	// OK
>
> 	alias Z = counterexample!int;	// NG
>
> The last one fails because a value is expected, not a type.
>
> If you *really* want to accept both values and types, `...` 
> comes to the rescue:
>
> 	template rescue(T...) if (T.length == 1) {}
>
> 	int x;
> 	string s;
> 	alias U = rescue!x;	// OK
> 	alias V = rescue!1;	// OK
> 	alias W = rescue!"yup";	// OK
> 	alias X = rescue!s;	// OK
> 	alias Z = rescue!int;	// OK!
>
>
> T

Ah thank you...I guess I didn't realize that literals like 1 and 
"yup" were considered "symbols" when it comes to alias template 
parameters.


More information about the Digitalmars-d mailing list