rsmith added inline comments.

================
Comment at: lib/Sema/SemaOverload.cpp:3850-3853
   // In Microsoft mode, prefer an integral conversion to a
   // floating-to-integral conversion if the integral conversion
   // is between types of the same size.
   // For example:
----------------
This should probably go after all the standard orderings.


================
Comment at: lib/Sema/SemaOverload.cpp:3872
+  //     promoted underlying type, if the two are different.
+  if (S.getLangOpts().CPlusPlus11 &&
+      (SCS1.getToType(1).getTypePtr() != SCS2.getToType(1).getTypePtr())) {
----------------
I don't think it makes sense to condition this on C++11 mode: we support fixed 
underlying types for enums in C++98 as an extension, and they should get this 
behavior too.


================
Comment at: lib/Sema/SemaOverload.cpp:3874-3879
+    bool S1ConvResult = isEnumConversionToUnderlyingType(S.Context, SCS1);
+    bool S2ConvResult = isEnumConversionToUnderlyingType(S.Context, SCS2);
+    if (S1ConvResult && !S2ConvResult)
+      return ImplicitConversionSequence::Better;
+    else if (!S1ConvResult && S2ConvResult)
+      return ImplicitConversionSequence::Worse;
----------------
This does not check that the "other" conversion converts to the promoted 
underlying type. It looks like this would (incorrectly) also order a case like:

```
enum A : char { a };
void f(char);
void f(const char&);
void g() { f(a); }
```


https://reviews.llvm.org/D32251



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to