C++ guys hate static_if?

bearophile bearophileHUGS at lycos.com
Thu Mar 14 16:11:46 PDT 2013


H. S. Teoh:

> What if templates were modified so that assumptions about T 
> have to be
> stated up front? We don't necessarily have to introduce 
> typeclasses as a
> separate thing, but we could have the compiler reject template 
> bodies
> that try to access internals of T that aren't stated up front. 
> E.g.:
>
> 	auto myFunc(T)(T t) {
> 		return t.fun();	// error: T wasn't stated to have a member 
> named .fun
> 	}
>
> would produce a compile error, whereas:
>
> 	auto myFunc(T)(T t)
> 		if (hasMember!(T, "fun"))
> 	{
> 		return t.fun();	// OK: we stated that we expect T to have a 
> .fun member
> 	}
>
> would be accepted. The stated assumptions can themselves be 
> templates
> too, which are expanded by the compiler before checking the 
> template
> body. (Presumably, hasMember will eventually expand to some 
> compiler
> intrinsic that tells the compiler what assumptions are being 
> made about
> T.) So we can still continue using things like isInputRange!T, 
> etc.,
> except that now the compiler will catch unstated assumptions.

What's the difference between this and Concepts (lite)? :-)

Bye,
bearophile


More information about the Digitalmars-d mailing list