Commit 1a8db4b8 authored by Christopher Dykes's avatar Christopher Dykes Committed by Facebook Github Bot

Workaround MSVC 2015 limitations in Traits.h

Summary: MSVC 2015 has issues with templated `using` declarations using `decltype`, so adjust the definition to use constexpr evaluation to fill a template parameter of a base type instead.

Reviewed By: yfeldblum

Differential Revision: D4510155

fbshipit-source-id: cc2e33625b515085dff4e682971299810905fef0
parent dfc2add7
...@@ -40,14 +40,20 @@ ...@@ -40,14 +40,20 @@
template <typename TTheClass_> \ template <typename TTheClass_> \
struct classname##__folly_traits_impl__ { \ struct classname##__folly_traits_impl__ { \
template <typename UTheClass_> \ template <typename UTheClass_> \
static std::true_type test(typename UTheClass_::type_name*); \ static constexpr bool test(typename UTheClass_::type_name*) { \
return true; \
} \
template <typename> \ template <typename> \
static std::false_type test(...); \ static constexpr bool test(...) { \
return false; \
} \
}; \ }; \
template <typename TTheClass_> \ template <typename TTheClass_> \
using classname = decltype( \ using classname = typename std::conditional< \
classname##__folly_traits_impl__<TTheClass_>::template test<TTheClass_>( \ classname##__folly_traits_impl__<TTheClass_>::template test<TTheClass_>( \
nullptr)) nullptr), \
std::true_type, \
std::false_type>::type;
#define FOLLY_CREATE_HAS_MEMBER_FN_TRAITS_IMPL(classname, func_name, cv_qual) \ #define FOLLY_CREATE_HAS_MEMBER_FN_TRAITS_IMPL(classname, func_name, cv_qual) \
template <typename TTheClass_, typename RTheReturn_, typename... TTheArgs_> \ template <typename TTheClass_, typename RTheReturn_, typename... TTheArgs_> \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment