Fun with templates

Namespace rswhite4 at googlemail.com
Sat Jul 6 05:27:38 PDT 2013


> The way that makes the most sense to me is:
>
> void f(T)(Unqual!T t) {}
>
> Given an immutable(T) for instance that I want to call with, it 
> would
> instantiate the template with the signature void f(T), and then 
> attempt to
> call it with the immutable(T). If immutable(T) is not 
> convertible to the
> argument T, then it would produce a compile error as if 
> attempting to call
> any such function that just receives T.
>
> The point here is that I want more control over the signature 
> of the
> instantiated template (reduce the number of permutations 
> generated for
> various calls). Template blow-out is perhaps the biggest and 
> most well
> known day-to-day problem in C++, and tools like this may be 
> very valuable
> to mitigate the disaster.

It seems that your code works if you put the Template Type 
explicit:
----
import std.stdio;
import std.traits : Unqual;

void foo(T)(Unqual!T a) {
	writeln(typeof(a).stringof, " <-> ", T.stringof);
}

void main() {
	int a;
	const int b;
	immutable int c;

	//foo(c); /// Error
	foo!(typeof(a))(a);
	foo!(typeof(b))(b);
	foo!(typeof(c))(c);
}
----


More information about the Digitalmars-d mailing list