some ideas for defaulting in templates

BCS BCS at pathlink.com
Thu Jan 17 09:49:17 PST 2008


currently in templates we have Implicit Template Properties:

""
If a template has exactly one member in it, and the name of that member 
is the same as the template name, that member is assumed to be referred 
to in a template instantiation
""

what I would like to propose is that this be changed to

""
If, in a template, all public* members have the same name, and the names 
of those members are the same as the template name, those member are 
assumed to be referred to in a template instantiation. Normal 
overloading rules apply.
""

I don't known how this will interact with overloading groups but it 
would allow for things like this:


template Foo(T)
{
	T Foo(){ return T.init; }
	void Foo(){}
}

In the proposal the word 'public', marked with '*', needs some thought. 
The idea is to allow some members that are totally local to the 
template. these would in effect be "local variables" that could be used 
something like this


template Foo(int i, int j, int k)
{
	private const int i_ = Bar!(i);
	private const int j_ = Bar!(j);
	private const int k_ = Bar!(k);

	const int Foo = (i_ + j_) / k_;
}

private is not actually the correct word as the "locals" wold be 
accessible from outside the template. Maybe "scope" could be used.

Thoughts??



More information about the Digitalmars-d mailing list