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

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to