6363
6464namespace tl {
6565namespace detail {
66- #ifndef TL_TRAITS_MUTEX
67- #define TL_TRAITS_MUTEX
66+ namespace fnref {
6867// C++14-style aliases for brevity
6968template <class T > using remove_const_t = typename std::remove_const<T>::type;
7069template <class T >
@@ -99,17 +98,16 @@ template <class F, class, class... Us> struct invoke_result_impl;
9998
10099template <class F , class ... Us>
101100struct invoke_result_impl <
102- F, decltype (invoke(std::declval<F>(), std::declval<Us>()...), void ()),
101+ F, decltype (tl::detail::fnref:: invoke(std::declval<F>(), std::declval<Us>()...), void ()),
103102 Us...> {
104- using type = decltype (invoke(std::declval<F>(), std::declval<Us>()...));
103+ using type = decltype (tl::detail::fnref:: invoke(std::declval<F>(), std::declval<Us>()...));
105104};
106105
107106template <class F , class ... Us>
108107using invoke_result = invoke_result_impl<F, void , Us...>;
109108
110109template <class F , class ... Us>
111110using invoke_result_t = typename invoke_result<F, Us...>::type;
112- #endif
113111
114112template <class , class R , class F , class ... Args>
115113struct is_invocable_r_impl : std::false_type {};
@@ -123,6 +121,7 @@ template <class R, class F, class... Args>
123121using is_invocable_r = is_invocable_r_impl<std::true_type, R, F, Args...>;
124122
125123} // namespace detail
124+ } // namespace fnref
126125
127126// / A lightweight non-owning reference to a callable.
128127// /
@@ -148,13 +147,13 @@ template <class R, class... Args> class function_ref<R(Args...)> {
148147 // /
149148 // / \synopsis template <typename F> constexpr function_ref(F &&f) noexcept
150149 template <typename F,
151- detail::enable_if_t <
152- !std::is_same<detail::decay_t <F>, function_ref>::value &&
153- detail::is_invocable_r<R, F &&, Args...>::value> * = nullptr >
150+ detail::fnref:: enable_if_t <
151+ !std::is_same<detail::fnref:: decay_t <F>, function_ref>::value &&
152+ detail::fnref:: is_invocable_r<R, F &&, Args...>::value> * = nullptr >
154153 TL_FUNCTION_REF_11_CONSTEXPR function_ref (F &&f) noexcept
155154 : obj_(const_cast <void *>(reinterpret_cast <const void *>(std::addressof(f)))) {
156155 callback_ = [](void *obj, Args... args) -> R {
157- return detail::invoke (
156+ return detail::fnref:: invoke (
158157 *reinterpret_cast <typename std::add_pointer<F>::type>(obj),
159158 std::forward<Args>(args)...);
160159 };
@@ -172,12 +171,12 @@ template <class R, class... Args> class function_ref<R(Args...)> {
172171 // /
173172 // / \synopsis template <typename F> constexpr function_ref &operator=(F &&f) noexcept;
174173 template <typename F,
175- detail::enable_if_t <detail::is_invocable_r<R, F &&, Args...>::value>
174+ detail::fnref:: enable_if_t <detail::fnref ::is_invocable_r<R, F &&, Args...>::value>
176175 * = nullptr >
177176 TL_FUNCTION_REF_11_CONSTEXPR function_ref<R(Args...)> &operator =(F &&f) noexcept {
178177 obj_ = reinterpret_cast <void *>(std::addressof (f));
179178 callback_ = [](void *obj, Args... args) {
180- return detail::invoke (
179+ return detail::fnref:: invoke (
181180 *reinterpret_cast <typename std::add_pointer<F>::type>(obj),
182181 std::forward<Args>(args)...);
183182 };
0 commit comments