A puzzle (easy one)

Frank Benoit keinfarbton at googlemail.com
Thu Aug 7 07:11:27 PDT 2008


Koroskin Denis schrieb:
> On Thu, 07 Aug 2008 05:59:30 +0400, Frank Benoit 
> <keinfarbton at googlemail.com> wrote:
> 
>> Wyverex schrieb:
>>> Wyverex wrote:
>>>> BCS wrote:
>>>>> Reply to Koroskin,
>>>>>
>>>>>> Write a one-line compile-time function (or template) that returns a
>>>>>> number, which can be written in binary as 010101010...010101. Exactly
>>>>>> the  same code should work for byte, short, int, long, cent etc.
>>>>>>
>>>>>> No loops or recursion allowed. Use nothing but brain! :)
>>>>>>
>>>>>
>>>>> template it(T)
>>>>> {
>>>>> T it = 
>>>>> 0x5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555_5555 
>>>>> & (t.max | t.min);
>>>>> }
>>>>>
>>>>>
>>>> Tried something like this, but mine and yours gives integer overflow...
>>>   template crazy( T )
>>> {
>>>   T crazy =  0xAAAA_AAAA_AAAA_AAAA;
>>> }
>>>  as long as the hex string is less then ulong.max ...  or ucent.max 
>>> when that gets implemented...
>>
>> template func( T ) { T func = mixin( "0x555555555555555555555555"[0 .. 
>> T.sizeof*2+2] ); }
> 
> No-no-no. It should work for integer type of *any* length (byte, short, 
> long, cent and any future type).
> And there is a *much* simpler solution!

right.
template func( T ) { T func = T.max/3; }


More information about the Digitalmars-d-learn mailing list