Even though this in no-where close to perfect (because we don't know how to 
specify common_type)  I think this is a strict improvement to what we have now 
for 3 reasons:

1. It makes common_type SFINAE friendly.
2. It properly supports common_type<void, void>
3. It properly supports user defined specializations (unlike N2408).

I'm can't decide on whether we should keep applying decay to the result of 
every ternary expression or adopt the new behaviour of only decaying the final 
result. However since this patch maintains the existing behaviour I think we 
should apply it until the committee comes to a consensus about what to do.

@K-ballo: Are you still willing to work on this?


================
Comment at: include/type_traits:1453
@@ -1452,12 +1452,3 @@
 {
-private:
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    static _Tp&& __t();
-    static _Up&& __u();
-#else  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    static _Tp __t();
-    static _Up __u();
-#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-public:
-    typedef typename remove_reference<decltype(true ? __t() : __u())>::type 
type;
+    typedef typename decay<decltype(true ? declval<_Tp>() : 
declval<_Up>())>::type type;
 };
----------------
Is it possible to make the non-variadic version SFINAE friendly as well? Or 
does it  require expression SFINAE (which ilslikely not available)?

http://reviews.llvm.org/D6964

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to