Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #6521

Re: Integer promotions, conversions, coercions and templates :(

From "MikeP" <mp011011@some.org>
Newsgroups comp.lang.c++
Subject Re: Integer promotions, conversions, coercions and templates :(
Date 2011-06-09 15:11 -0500
Organization A noiseless patient Spider
Message-ID <isr9cs$6j7$1@dont-email.me> (permalink)
References (1 earlier) <95ab12FrnrU6@mid.individual.net> <isp36q$7sb$1@dont-email.me> <95apmqFrnrU10@mid.individual.net> <isqee8$iru$1@dont-email.me> <95clnbFqk0U1@mid.individual.net>

Show all headers | View raw


Ian Collins wrote:
> On 06/10/11 12:30 AM, MikeP wrote:
>> Ian Collins wrote:
>>> On 06/ 9/11 12:13 PM, MikeP wrote:
>>>> Ian Collins wrote:
>>>>> On 06/ 9/11 10:09 AM, MikeP wrote:
>>>>>> I need help (but nevermind that!) templates and the C++ integer
>>>>>> rules are confusing me! (No occifer, I have not been drinking, I
>>>>>> am just dazed and confused by C++ integer rules!).
>>>>>>
>>>>>> // CheckBit
>>>>>> // Checks the status of individual bits of any unsigned integer
>>>>>> type. // Indexing of bits starts at 1, not 0.
>>>>>> // mask can be any unsigned integer type.
>>>>>> // W is the width of the type T.
>>>>>> //
>>>>>> template<typename T, unsigned int W>
>>>>>> bool CheckBit(T&    mask, T n)
>>>>>> {   // The assertion should be an exception, I know.
>>>>>>        Assert((n>= 1)&&    (n<= W), "Bit index out of range.")
>>>>>
>>>>> Missing semicolon.
>>>>>
>>>>>>        return ((mask&    ((T)1)<<    (n-((T)1))) != 0);
>>>>>> }
>>>>>>
>>>>>> I wanted to use the appropriate integer type suffix as a template
>>>>>> parameter to use on the 1's (don't know if I needed to though),
>>>>>> but C++ templates won't allow that so I have the casts-to-T all
>>>>>> over the place but I'm not sure if they are necessary.
>>>>>
>>>>> Why don't you just use
>>>>>
>>>>>     const T one(1);
>>>>>     return (((mask&   one)<<   (n-one)) != 0);
>>>>
>>>> Adds one move instruction to get '1' into 'one' (which is in a
>>>> register) over the cast-to-T implementation (2 move instructions
>>>> for 64-bit T), so I'd keep the ugly version. Using the suffix
>>>> would be the way to write CheckBit if it wasn't a template:
>>>
>>> Poor job on the compiler's part!
>>>
>>> The function should optimise down to 0 or 1.
>>
>> The example is actually an inline method in a class, but even so, the
>> compiler didn't inline it. Weird. (My example should have had the
>> "inline" keyword on it also).
>
> That's unnecessary in this case.

It's necessary for a free function which the example is.

>
>> My bad, I'm in debug mode with inlining overridden!
>
> Oops...
>

Yeah. I was in a rush to see what your version looked like under the 
glass compared to the other one. I imagine they'll both expand to 
virtually nothing as you said (but I haven't looked at it yet).

>> I'll do the release version and repost later. (Still
>> educational though from a learning-assembly and code generation
>> perspective).
>>
>> It does seem that templates are trumped by a preprocessor macro this
>> time, for the macro does not require a change to the algorithm.
>> Templates defficient?
>
> What change to what algorithm?

(Please recognize the expressive liberty taken with the term "algorithm". 
I'm not afraid to let the context do most of the talking).

Templates cannot generate what the programmer would write:

return ((mask &  1ui64<< (n-1ui64)) != 0);

with the appropriate suffix for the different width unsigned integers. 
But a macro can. (I know the suffixes aren't standard, but they probably 
should be (I've yet to check if VC++ accepts "ULL", cuz I always use the 
ones as shown above). Afterall, the committee standardizes common 
practice).




Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-08 17:09 -0500
  Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-09 10:22 +1200
    Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-08 17:49 -0500
    Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-08 19:13 -0500
      Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-09 14:32 +1200
        Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 07:30 -0500
          Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-09 06:18 -0700
            Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 08:45 -0500
              Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-09 06:51 -0700
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 13:44 -0500
          Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-10 07:37 +1200
            Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 15:11 -0500
              Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-10 09:09 +1200
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 17:15 -0500
                Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-10 10:40 +1200
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 05:07 -0500
                Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 03:14 -0700
                Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 03:19 -0700
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 06:08 -0500
                Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 04:32 -0700
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 07:14 -0500
                Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 05:27 -0700
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 07:35 -0500
                Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 06:47 -0700
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 06:18 -0500
                Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-11 08:08 +1200
                Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 18:41 -0500
    Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 08:11 -0500
  Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-09 06:28 -0700
    Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 08:50 -0500
  Re: Integer promotions, conversions, coercions and templates :( (Summary so far) "MikeP" <mp011011@some.org> - 2011-06-10 08:40 -0500
    Re: Integer promotions, conversions, coercions and templates :( (Summary so far) Öö Tiib <ootiib@hot.ee> - 2011-06-10 07:14 -0700
      Re: Integer promotions, conversions, coercions and templates :( (Summary so far) "MikeP" <mp011011@some.org> - 2011-06-10 09:17 -0500
    Re: Integer promotions, conversions, coercions and templates :( (Summary so far)(Corrections and more) "MikeP" <mp011011@some.org> - 2011-06-10 09:14 -0500
      Re: Integer promotions, conversions, coercions and templates :( (Results: Generated Code) "MikeP" <mp011011@some.org> - 2011-06-10 12:43 -0500
  Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-14 18:35 -0500
    Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Ian Collins <ian-news@hotmail.com> - 2011-06-15 12:51 +1200
      Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-15 08:45 -0500
    Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-15 03:33 -0700
      Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-15 09:17 -0500
        Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-16 04:17 -0700
          Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-16 09:45 -0500
            Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-17 01:56 -0700
              Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 07:58 -0500
                Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-17 06:54 -0700
                Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 09:19 -0500
              Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 08:17 -0500
                Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-17 07:33 -0700
                Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 09:49 -0500

csiph-web