Attempt to fix the clang build

This commit is contained in:
Denis Blank 2018-03-12 14:20:59 +01:00
parent 0da0dca385
commit 31b37dfbcf

View File

@ -119,37 +119,40 @@ using void_t = typename detail::deduce_to_void<T...>::type;
}(0) }(0)
#else #else
namespace detail { namespace detail {
template <typename TrueCallback> template <typename TrueCallback, typename Guard>
constexpr void static_if_impl(std::true_type, TrueCallback&& trueCallback) { constexpr void static_if_impl(std::true_type, TrueCallback&& trueCallback,
std::forward<TrueCallback>(trueCallback)(0); Guard&& guard) {
std::forward<TrueCallback>(trueCallback)(guard);
} }
template <typename TrueCallback> template <typename TrueCallback, typename Guard>
constexpr void static_if_impl(std::false_type, constexpr void static_if_impl(std::false_type, TrueCallback&& /*trueCallback*/,
TrueCallback&& /*trueCallback*/) { Guard&& /*guard*/) {
} }
template <typename TrueCallback, typename FalseCallback> template <typename TrueCallback, typename FalseCallback, typename Guard>
constexpr auto static_if_impl(std::true_type, TrueCallback&& trueCallback, constexpr auto static_if_impl(std::true_type, TrueCallback&& trueCallback,
FalseCallback&& /*falseCallback*/) { FalseCallback&& /*falseCallback*/,
return std::forward<TrueCallback>(trueCallback)(0); Guard&& guard) {
return std::forward<TrueCallback>(trueCallback)(guard);
} }
template <typename TrueCallback, typename FalseCallback> template <typename TrueCallback, typename FalseCallback, typename Guard>
constexpr auto static_if_impl(std::false_type, TrueCallback&& /*trueCallback*/, constexpr auto static_if_impl(std::false_type, TrueCallback&& /*trueCallback*/,
FalseCallback&& falseCallback) { FalseCallback&& falseCallback, Guard&& guard) {
return std::forward<FalseCallback>(falseCallback)(0); return std::forward<FalseCallback>(falseCallback)(guard);
} }
} // namespace detail } // namespace detail
#define CONTINUABLE_IF_CONSTEXPR_SELECT_2(EXPR, TRUE_BRANCH) \ #define CONTINUABLE_IF_CONSTEXPR_SELECT_2(EXPR, TRUE_BRANCH) \
cti::detail::traits::detail::static_if_impl( \ cti::detail::traits::detail::static_if_impl( \
std::integral_constant<bool, EXPR>{}, [&](auto) mutable { TRUE_BRANCH }) std::integral_constant<bool, EXPR>{}, [&](auto) mutable { TRUE_BRANCH }, \
EXPR)
#define CONTINUABLE_IF_CONSTEXPR_SELECT_3(EXPR, TRUE_BRANCH, FALSE_BRANCH) \ #define CONTINUABLE_IF_CONSTEXPR_SELECT_3(EXPR, TRUE_BRANCH, FALSE_BRANCH) \
cti::detail::traits::detail::static_if_impl( \ cti::detail::traits::detail::static_if_impl( \
std::integral_constant<bool, EXPR>{}, [&](auto) mutable { TRUE_BRANCH }, \ std::integral_constant<bool, EXPR>{}, [&](auto) mutable { TRUE_BRANCH }, \
[&](auto) { FALSE_BRANCH }) [&](auto) { FALSE_BRANCH }, EXPR)
#endif // CONTINUABLE_HAS_CXX17_IF_CONSTEXPR #endif // CONTINUABLE_HAS_CXX17_IF_CONSTEXPR
// https://stackoverflow.com/questions/16374776/macro-overloading // https://stackoverflow.com/questions/16374776/macro-overloading