Boost logo

Boost :

From: Daryle Walker (dwalker07_at_[hidden])
Date: 2003-03-02 20:55:02


On Thursday, February 13, 2003, at 6:11 AM, Daniel Frey wrote:

> Markus Schöpflin wrote:
>>
>> Daniel Frey wrote:
>>
>>> Markus Schöpflin wrote:
>>
>>>> This was the original source:
>>>>
>>>> template<bool, typename> struct enable_if;
>>>> -----------------------^
>>>>
>>>> Visual Age doesn't like this, it needs a name here.
>>>
>>> ^^^^^^^^^^
>>>
>>> Ah, that's the reason. But given my recent discomfort about
>>> unmaintainable code, look at it again:
>>>
>>> # if BOOST_WORKAROUND(__HP_aCC, <= 33900)
>>> template<bool cond, typename T> struct enable_if;
>>> # else
>>> template<bool, typename T> struct enable_if;
>>> # endif
>>>
>>> Does this really makes sense? Shouldn't we just keep one version
>>> with names for template parameters? AFAICS this should work for all
>>> compilers and it could be a general boost coding guideline to always
>>> provide names for template parameters. Comments?
>>
>> Agreed, if it works for all compilers, let's just keep the version
>> with the names. (And add a comment that it should stay like it is!)
>
> No, don't add a comment. Let's make it a boost coding guideline,
> otherwise we will clutter the code again with comments instead of
> workarounds. Remember that this is only one example of a line with
> template parameters. Would you like to add a comment for every line
> all over boost?

Should the template parameter names be something like Unused (if
there's exactly one) or Unused1, Unused2, etc.?

Later, on February 16, 2003, at 9:29 PM, Dave Gomboc wrote:

>> So you would prefer
>>
>> #if BOOST_WORKAROUND(__HP_aCC, <= 33900)
>> template<bool cond, typename T> struct enable_if;
>> #elif BOOST_WORKAROUND(__VisualAge, <= 12345) // Dummy values
>> template<bool, typename T> struct enable_if;
>> #else
>> template<bool, typename> struct enable_if;
>> #endif
>>
>> over
>>
>> template<bool cond, typename T> struct enable_if;
>>
>> If that is the case, then we disagree. Do you have any reason to
>> prefer the first version?
>
> No, I would prefer
>
> #if BOOST_WORKAROUND(__HP_aCC, <=33900) ||
> BOOST_WORKAROUND(__VisualAge,
> <=12345)
> template <bool cond, typename T> struct enable_if;
> #else
> template <bool, typename> struct enable_if;
> #endif
>
> I already explained the reason: C++ compiler vendors use Boost with
> BOOST_NO_CONFIG for conformance testing. I'd rather see broken
> compilers get fixed than developers forever spending time finding
> workarounds.

If vendors want to do this check, then they could #define Unused,
Unused1, Unused2, etc. to be nothing. (Make sure to check all the
files to see if my suggestion is the only use of these words.)

Daryle


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk