From: Christopher Dykes Date: Tue, 12 Sep 2017 20:54:49 +0000 (-0700) Subject: Don't use std::void_t X-Git-Tag: v2017.09.18.00~13 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d4bba1e7771d33ff5af498e1bb487822610f88e6;p=folly.git Don't use std::void_t Summary: I was wrong, MSVC's implementation has the same bug as everything else. Reviewed By: yfeldblum Differential Revision: D5810646 fbshipit-source-id: 9caabbbc2115f57b7e836bb85c9b108588c94ad9 --- diff --git a/folly/Traits.h b/folly/Traits.h index 58d507b1..45781cf5 100644 --- a/folly/Traits.h +++ b/folly/Traits.h @@ -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 @@ -222,8 +213,6 @@ struct void_t_ { template using void_t = _t>; -#endif // defined(_MSC_VER) - /** * IsRelocatable::value describes the ability of moving around * memory a value of type T by using memcpy (as opposed to the