I would recommend care when messing with the DCHECK_EQ macros and
user-defined types, I've been burned by this many times.  This may have
been fixed with the new version of glog-0.3.4-p2 toolchain update, the
scary old comment "TODO(hamaji): Figure out a way to fix" and "#if 1 using
::operator<<; #endif" seem to have been removed, so YMMV.  Maybe the friend
suggestion works now.

Also, suggestion number 4:

4.  Wait for reflection to arrive in C++20, whereby we get this
functionality for free.

I wouldn't invest heavily in stringify functionality that requires
maintenance of any kind at all.  DCHECKs are mainly useful for generating
cores, where the enum values are already available via debug symbols anyway.

 - Zach

On Tue, Jun 27, 2017 at 2:06 PM, Jim Apple <jbap...@cloudera.com> wrote:

> I'm not sure it's worth the effort to write all of the stringify methods.
> My order of preference is:
>
> 1. Just use friend with the current conversion-to-int behavior.
>
> 2. Do something from this list so there won't be manual work for each new
> enum decl:
> https://stackoverflow.com/questions/28828957/enum-to-string-
> in-modern-c-and-future-c17-c20
>
> 3. Write a stringify function for each enum type.
>
> On Tue, Jun 27, 2017 at 1:42 PM, Steve Carlin <ste...@arcadiadata.com>
> wrote:
>
> > Hi all,
> >
> > Short time user, first time poster.  This post is in reference to the
> > following Jira:  https://issues.apache.org/jira/browse/IMPALA-3738
> >
> > I'm currently looking at IMPALA-3738 which involves changing enums to
> c+11
> > style (e.g. "enum A" to "enum class A"
> >
> > Unfortunately, as with everything in life, there are complications.
> > Nothing major, but wanted some advice before I changed a lot of code only
> > to find out it gets rejected.
> >
> > Chrome did a similar fix and had a similar complication.  For details,
> you
> > can reference this code review:
> > https://codereview.chromium.org/835783003/patch/1/10003
> >
> > But the problem is this:  Simply changing it to c+11 style gives us a
> > compiler error with the macro DCHECK_EQ.  The solution which they used in
> > chrome was to add a "friend" class.  I'm ok with doing this unless
> someone
> > has another suggestion.
> >
> > On top of this though, I have another question.  The DCHECK_EQ macro will
> > print a message such as this:  Check failed: x == y (1 vs. 3).
> > Specifically, my question has to do with the "1 vs 3" portion.  Do we
> want
> > to print a more user friendly message?  If so, we would have to do
> > something similar to what the chrome checkin has:  They call a method
> that
> > converts the enum to a string and prints out the string value (they
> already
> > had these methods in place before their change).  Is it worth doing this
> > kind of rewrite, or are we ok with just having the enum value?
> >
> > Thanks!
> >
> > Steve
> >
>

Reply via email to