Don't use std::void_t
authorChristopher Dykes <cdykes@fb.com>
Tue, 12 Sep 2017 20:54:49 +0000 (13:54 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 12 Sep 2017 21:13:23 +0000 (14:13 -0700)
Summary: I was wrong, MSVC's implementation has the same bug as everything else.

Reviewed By: yfeldblum

Differential Revision: D5810646

fbshipit-source-id: 9caabbbc2115f57b7e836bb85c9b108588c94ad9

folly/Traits.h

index 58d507b17e2084543aa8c3132efc707b0cfaa6ac..45781cf5586701260dfa516ab119bf816cd60323 100644 (file)
@@ -174,9 +174,9 @@ using _t = typename T::type;
  */
 
 /**
- * There is a bug in gcc that causes it to ignore unused template parameter
- * arguments in template aliases and does not cause substitution failures.
- * This defect has been recorded here:
+ * There is a bug in libstdc++, libc++, and MSVC's STL that causes it to
+ * ignore unused template parameter arguments in template aliases and does not
+ * cause substitution failures. This defect has been recorded here:
  * http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1558.
  *
  * This causes the implementation of std::void_t to be buggy, as it is likely
@@ -201,16 +201,7 @@ using _t = typename T::type;
  * The second foo() will be a redefinition because it conflicts with the first
  * one; void_t does not cause substitution failures - the template types are
  * just ignored.
- *
- * Till then only the non-buggy MSVC std::void_t can be used, and for the rest
- * folly::void_t will continue to be used because it does not use unnamed
- * template parameters for the top level implementation of void_t.
  */
-#if defined(_MSC_VER)
-
-/* using override */ using std::void_t;
-
-#else // defined(_MSC_VER)
 
 namespace traits_detail {
 template <class...>
@@ -222,8 +213,6 @@ struct void_t_ {
 template <class... Ts>
 using void_t = _t<traits_detail::void_t_<Ts...>>;
 
-#endif // defined(_MSC_VER)
-
 /**
  * IsRelocatable<T>::value describes the ability of moving around
  * memory a value of type T by using memcpy (as opposed to the