- // Helper functions for implementing the traits using SFINAE
- template <class T>
- static auto timed_lock_test(T*) -> typename std::is_same<
- decltype(std::declval<T>().try_lock_for(std::chrono::milliseconds(0))),
- bool>::type;
- template <class T>
- static std::false_type timed_lock_test(...);
-
- template <class T>
- static auto lock_shared_test(T*) -> typename std::
- is_same<decltype(std::declval<T>().lock_shared()), void>::type;
- template <class T>
- static std::false_type lock_shared_test(...);
-
- template <class T>
- static auto lock_upgrade_test(T*) -> typename std::
- is_same<decltype(std::declval<T>().lock_upgrade()), void>::type;
- template <class T>
- static std::false_type lock_upgrade_test(...);