Overlapping functionality: IFTI, templates, is-expressions

Russell Lewis webmaster at villagersonline.com
Thu Mar 20 06:39:10 PDT 2008


Jason House wrote:
>> Is it possible that SFINAE was a hack to get around C++'s lack of 
>> compile-time features?  A hack that we can now dispense of?
> 
> I don't know if it's that simple.  What if I want a specialization where T extends from two interfaces?  I think the current syntax can handle simple stuff, but I don't know if it can go beyond that.  Maybe some would argue the more complex cases should be done with static if anyway...
> 
> Personally, I wouldn't mind some kind of optional in clause for a templated definition that can do a few static asserts to force more complex conditions...  I don't know what would be the best syntax for that.

Good idea!  But just to make things clear, let's make it an "SFINAE 
block."  How about this definition:

BEGIN CODE
	template foo(PARAMS)
	sfinae
	{
		// any failures in this block of code will cause DMD to
		// silently try a different template specialization
	}
	body
	{
		// any failures in this block of code are hard failures

		// ...but this block of code should be able to reference
		// symbols declared in the sfinae block
	}
END CODE



More information about the Digitalmars-d mailing list