A puzzle (easy one)

Koroskin Denis 2korden at gmail.com
Thu Aug 7 07:00:28 PDT 2008


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!


More information about the Digitalmars-d-learn mailing list