Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #6836
| 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> |
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
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