[PATCH] [libcxx] Correct SFINAE version of is_convertible to match spec and avoid triggering unnecessary compiler diagnostics
Albert Wong
ajwong at google.com
Wed Aug 20 18:34:03 PDT 2014
gentle ping...
================
Comment at: include/type_traits:840
@@ -841,2 +839,3 @@
+template <class _Tp> typename remove_reference<_Tp>::type& __create();
#endif
----------------
Agustín Bergé wrote:
> Couldn't `__create` be replaced by `declval`, defined earlier in this file?
Yes...I wasn't certain why this had __source() previously.
[meta.rel]p4 calls the function create(), but you're right...it looks the same. Changed and added a comment.
================
Comment at: include/type_traits:842
@@ -842,1 +841,3 @@
+template <class _Tp> char helper(_Tp);
+
----------------
Agustín Bergé wrote:
> Shouldn't this be named `__helper` instead?
done.
================
Comment at: include/type_traits:845
@@ +844,3 @@
+template <class _Tp, class _Tf>
+typename enable_if<sizeof(helper<_Tp>(__create<_Tf>())) == 1, char>::type
+ __test(int);
----------------
Agustín Bergé wrote:
> If I understand this correctly, it requires generalized SFINAE to work. Is that the intention?
I'm not sure I understand what generalized SFINAE is. I'm testing mainly by compiler.
The previous code just didn't work.
http://reviews.llvm.org/D4341
More information about the cfe-commits
mailing list