Proposal: static template(fail)

Bill Baxter dnewsgroup at billbaxter.com
Thu Dec 13 12:16:46 PST 2007


Sean Kelly wrote:
> Janice Caron wrote:
>> I would like to propose a new statement:
>>
>>     static template(fail);
>>
>> which causes a compile-time substitution failure. And remember: SFINAE
>> - Substitution Failure Is Not An Error
>>
>> Let me give you an example:
>>
>>     struct S(T)
>>     {
>>         static if(isFloatingPoint!(T))
>>         {
>>             /*...*/
>>         }
>>         else static if(passesSomeVeryComplicatedTest!(T))
>>         {
>>             /*...*/
>>         }
>>         else
>>         {
>>             static template(fail); // SFINAE
>>         }
>>     }
>>
>> This has advantages over old-style specialisation.
> 
> I guess this would require the compiler to not complain if I did this?
> 
> struct S(T)
> {
>     static if(is(T==int))
>         static template(fail);
> }
> 
> struct S(T)
> {
> 
> }
> 
> S!(int);
> 
> 
> Sean

No, you have to make one of them specialized somehow, otherwise it's 
just a good old fashioned redundant definition error.  Like if you tried 
to make two functions "void foo(int)".

--bb



More information about the Digitalmars-d mailing list