android-ndk-r17.hpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #ifndef ENTT_PLATFORM_ANDROID_NDK_R17_HPP
  2. #define ENTT_PLATFORM_ANDROID_NDK_R17_HPP
  3. /**
  4. * @cond TURN_OFF_DOXYGEN
  5. * Internal details not to be documented.
  6. */
  7. #ifdef __ANDROID__
  8. # include <android/ndk-version.h>
  9. # if __NDK_MAJOR__ == 17
  10. # include <functional>
  11. # include <type_traits>
  12. # include <utility>
  13. namespace std {
  14. namespace internal {
  15. template<typename Func, typename... Args>
  16. constexpr auto is_invocable(int) -> decltype(std::invoke(std::declval<Func>(), std::declval<Args>()...), std::true_type{});
  17. template<typename, typename...>
  18. constexpr std::false_type is_invocable(...);
  19. template<typename Ret, typename Func, typename... Args>
  20. constexpr auto is_invocable_r(int)
  21. -> std::enable_if_t<decltype(std::is_convertible_v<decltype(std::invoke(std::declval<Func>(), std::declval<Args>()...)), Ret>, std::true_type>;
  22. template<typename, typename, typename...>
  23. constexpr std::false_type is_invocable_r(...);
  24. } // namespace internal
  25. template<typename Func, typename... Args>
  26. struct is_invocable: decltype(internal::is_invocable<Func, Args...>(0)) {};
  27. template<typename Func, typename... Argsv>
  28. inline constexpr bool is_invocable_v = std::is_invocable<Func, Args...>::value;
  29. template<typename Ret, typename Func, typename... Args>
  30. struct is_invocable_r: decltype(internal::is_invocable_r<Ret, Func, Args...>(0)) {};
  31. template<typename Ret, typename Func, typename... Args>
  32. inline constexpr bool is_invocable_r_v = std::is_invocable_r<Ret, Func, Args...>::value;
  33. template<typename Func, typename... Args>
  34. struct invoke_result {
  35. using type = decltype(std::invoke(std::declval<Func>(), std::declval<Args>()...));
  36. };
  37. template<typename Func, typename... Args>
  38. using invoke_result_t = typename std::invoke_result<Func, Args...>::type;
  39. } // namespace std
  40. # endif
  41. #endif
  42. /**
  43. * Internal details not to be documented.
  44. * @endcond
  45. */
  46. #endif