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


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

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

From "MikeP" <mp011011@some.org>
Newsgroups comp.lang.c++
Subject Re: Integer promotions, conversions, coercions and templates :( (Conclusion)
Date 2011-06-17 08:17 -0500
Organization A noiseless patient Spider
Message-ID <itfk5g$ar1$1@dont-email.me> (permalink)
References (2 earlier) <93956ef8-85ef-4805-81a9-794694d2d5d5@u19g2000vbi.googlegroups.com> <itaeuo$ljn$2@dont-email.me> <84a9f141-c56d-4a72-92d0-bd1250397901@q17g2000vby.googlegroups.com> <itd4u2$34g$1@dont-email.me> <34b59459-2560-40ac-9970-4b56ea3bf10e@e21g2000vbz.googlegroups.com>

Show all headers | View raw


Michael DOUBEZ wrote:

>>>>> template <typename T, unsigned int W = numeric_limit<T>::digits >
>>>>> bool CheckBit(T& mask, unsigned n)
>>>>> {
>>>>> static_assert( is_integral<T>::value && is_unsigned<T>::value );
>>>>> // assert n in range
>>>>> const T mask_n = T(1) << (n-1ui32);
>>>>> return mask & mask_n != 0;
>>>>> }
>>
>>>> How is that more clear than using zero and the width of the
>>>> unsigned integer type in the assertion?
>>
>>> The static assert ensures the range of template type parameters is
>>> limited to unsigned integral type.
>>
>> Too much machinery for such a simple need. Too obfuscating also.
>
> True. I would have prefered concepts but AFAIS we won't get them for
> another decade now.

IOW, never! (Because that is beyond C++'s lifespan potential).


>>>>> Better to put as little as possible in the macro.
>>
>>>> I have used the "generate unique names with a macro for macro-based
>>>> templates so much though, that it is a well-tested and accepted
>>>> technique.
>>
>>> And one I use extensively together with code generation of the super
>>> macro. And even after two years of using it, I find it unclear, hard
>>> to debug and a pain to read.
>>
>> Don't know what to tell ya. It works great for me. Nary a problem.
>
> We don't have the same problem space.

I don't see that as an issue, but I'm assuming you mean that proverbial 
"large scale project". The issue is appropriate application of the 
technique. Sure, if you over-use it instead of just using it when 
necessary, problems may ensue (especially with no ancillary management of 
the development process that recognizes various techniques instead of The 
Big One). No need to continue this assumptive dialog though. Just a few 
thoughts that immediately came to mind.

>
>> Super
>> macros allow stepping into and debugging whereas a traditional macro
>> (all on one line with line continuation chars) are hard to debug. I
>> probably have a more evolved way of handling the issues.
>
> The tools available are a bit dated but I didn't expect a debugger
> could step into a macro definition.

That is what "super macros" afford you. It's their biggest selling point. 
Perhaps you don't know what I meant with "super macro"? A web search will 
probably find it for you. But in short, the technique is such that the 
parameterized code is put in a separate include file and the inclusion of 
that file is wrapped with desired parameter values. For example:

#define T uint32
#include <myclasstemplate.h>
#undef T // Undefines can be put in the include file at the bottom.

The above will define whatever is in the include file but with the Ts as 
uint32s. There are no line continuation characters in the supermacro in 
myclasstemplate.h and that allows the compiler to step through instances 
of objects of the supermacro.


>
>>>>> But, it shouldn't fail on unsigned type.
>>
>>>> Oh? You don't think that overloading a function on only all of the
>>>> unsigned integer types will be a problem?
>>
>>> Not if you forbid the overload on the signed types (my making them
>>> private by example).
>>> Note that static_assert() makes the compilation fails on signed
>>> types.
>>
>> Signed types are not an issue in this case, per se. Implicit
>> conversions/coercions/promotions are the issue in regards to
>> overloaded functions.
>
> Could you give me a failing case/scenario ?

Try the example and you are bound to run into problems. Overloading on 
integer types is perilous with C++.

>
>>>> It looks like an oversight (problem unaddressed) to design a
>>>> generic type mechanism and not address literals within that
>>>> mechanism. I think that pretty much characterizes the issue in the
>>>> use case scenario in this thread.
>>
>>> What syntax would you propose ?
>>
>> I have a short-term solution (macros). While the issue should
>> probably be addressed, it can't really be fixed, only band-aided
>> over. Perhaps something that allows templates to have some
>> text-substitution capabilities is in order.
>
> Yes. That and iterating over the members, getting a meaningful name
> identifier. In brief, compile time reflexion/introspection.

Perhaps. I haven't thought much about that kind of thing other than 
recognizing, as in this example, that something is missing. 

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