<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">See llvm/include/llvm/ADT/BitmaskEnum.h <div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Aug 29, 2016, at 11:35 AM, David Blaikie <<a href="mailto:dblaikie@gmail.com" class="">dblaikie@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Justin - didn't you, or someone, play around with making a utility for enums that represent flags to work more betterer?<br class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Mon, Aug 29, 2016 at 11:31 AM Victor <<a href="mailto:vleschuk@gmail.com" class="">vleschuk@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">vleschuk added a comment.<br class="">
<br class="">
In <a href="https://reviews.llvm.org/D23766#528004" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/D23766#528004</a>, @dblaikie wrote:<br class="">
<br class="">
> Why is it that we aren't just using teh DIFlags type directly everywhere we are currently using unsigned (everywhere you're changing to DIFlagsUnderlying)?<br class="">
<br class="">
<br class="">
Because constructions like the following do not compile<br class="">
<br class="">
  enum DIFlags: uint32_t<br class="">
  {<br class="">
      Flag1 = 1,<br class="">
      Flag2 = 1 << 2,<br class="">
      Flag3 = 1 << 3,<br class="">
  };<br class="">
<br class="">
  // ....<br class="">
<br class="">
  DIFlags Flags = Flag1 | Flag2; // expression (Flag1 | Flag2) isn't DIFlags, it results in underlying type<br class="">
<br class="">
<br class="">
<br class="">
  clang++ -std=c++11 t.cpp -o t<br class="">
  t.cpp:12:13: error: cannot initialize a variable of type 'DIFlags' with an rvalue of type 'unsigned int'<br class="">
      DIFlags Flags = Flag1 | Flag2;<br class="">
              ^       ~~~~~~~~~~~~~<br class="">
  1 error generated.<br class="">
<br class="">
<br class="">
<a href="https://reviews.llvm.org/D23766" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/D23766</a><br class="">
<br class="">
<br class="">
<br class="">
</blockquote></div></div>
</div></blockquote></div><br class=""></div></body></html>