#ifndef ENTT_PLATFORM_ANDROID_NDK_R17_HPP #define ENTT_PLATFORM_ANDROID_NDK_R17_HPP /** * @cond TURN_OFF_DOXYGEN * Internal details not to be documented. */ #ifdef __ANDROID__ # include # if __NDK_MAJOR__ == 17 # include # include # include namespace std { namespace internal { template constexpr auto is_invocable(int) -> decltype(std::invoke(std::declval(), std::declval()...), std::true_type{}); template constexpr std::false_type is_invocable(...); template constexpr auto is_invocable_r(int) -> std::enable_if_t(), std::declval()...)), Ret>, std::true_type>; template constexpr std::false_type is_invocable_r(...); } // namespace internal template struct is_invocable: decltype(internal::is_invocable(0)) {}; template inline constexpr bool is_invocable_v = std::is_invocable::value; template struct is_invocable_r: decltype(internal::is_invocable_r(0)) {}; template inline constexpr bool is_invocable_r_v = std::is_invocable_r::value; template struct invoke_result { using type = decltype(std::invoke(std::declval(), std::declval()...)); }; template using invoke_result_t = typename std::invoke_result::type; } // namespace std # endif #endif /** * Internal details not to be documented. * @endcond */ #endif