1414#ifndef TL_FUNCTION_REF_HPP
1515#define TL_FUNCTION_REF_HPP
1616
17- #define TL_FUNCTION_REF_VERSION_MAJOR 0
18- #define TL_FUNCTION_REF_VERSION_MINOR 3
17+ #define TL_FUNCTION_REF_VERSION_MAJOR 1
18+ #define TL_FUNCTION_REF_VERSION_MINOR 0
19+ #define TL_FUNCTION_REF_VERSION_PATCH 0
1920
2021#if (defined(_MSC_VER) && _MSC_VER == 1900)
2122// / \exclude
6263
6364namespace tl {
6465namespace detail {
65- #ifndef TL_TRAITS_MUTEX
66- #define TL_TRAITS_MUTEX
66+ namespace fnref {
6767// C++14-style aliases for brevity
6868template <class T > using remove_const_t = typename std::remove_const<T>::type;
6969template <class T >
@@ -98,17 +98,16 @@ template <class F, class, class... Us> struct invoke_result_impl;
9898
9999template <class F , class ... Us>
100100struct invoke_result_impl <
101- F, decltype (invoke(std::declval<F>(), std::declval<Us>()...), void ()),
101+ F, decltype (tl::detail::fnref:: invoke(std::declval<F>(), std::declval<Us>()...), void ()),
102102 Us...> {
103- using type = decltype (invoke(std::declval<F>(), std::declval<Us>()...));
103+ using type = decltype (tl::detail::fnref:: invoke(std::declval<F>(), std::declval<Us>()...));
104104};
105105
106106template <class F , class ... Us>
107107using invoke_result = invoke_result_impl<F, void , Us...>;
108108
109109template <class F , class ... Us>
110110using invoke_result_t = typename invoke_result<F, Us...>::type;
111- #endif
112111
113112template <class , class R , class F , class ... Args>
114113struct is_invocable_r_impl : std::false_type {};
@@ -122,6 +121,7 @@ template <class R, class F, class... Args>
122121using is_invocable_r = is_invocable_r_impl<std::true_type, R, F, Args...>;
123122
124123} // namespace detail
124+ } // namespace fnref
125125
126126// / A lightweight non-owning reference to a callable.
127127// /
@@ -147,13 +147,13 @@ template <class R, class... Args> class function_ref<R(Args...)> {
147147 // /
148148 // / \synopsis template <typename F> constexpr function_ref(F &&f) noexcept
149149 template <typename F,
150- detail::enable_if_t <
151- !std::is_same<detail::decay_t <F>, function_ref>::value &&
152- 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 >
153153 TL_FUNCTION_REF_11_CONSTEXPR function_ref (F &&f) noexcept
154154 : obj_(const_cast <void *>(reinterpret_cast <const void *>(std::addressof(f)))) {
155155 callback_ = [](void *obj, Args... args) -> R {
156- return detail::invoke (
156+ return detail::fnref:: invoke (
157157 *reinterpret_cast <typename std::add_pointer<F>::type>(obj),
158158 std::forward<Args>(args)...);
159159 };
@@ -167,12 +167,12 @@ template <class R, class... Args> class function_ref<R(Args...)> {
167167 // /
168168 // / \synopsis template <typename F> constexpr function_ref &operator=(F &&f) noexcept;
169169 template <typename F,
170- detail::enable_if_t <detail::is_invocable_r<R, F &&, Args...>::value>
170+ detail::fnref:: enable_if_t <detail::fnref ::is_invocable_r<R, F &&, Args...>::value>
171171 * = nullptr >
172172 TL_FUNCTION_REF_11_CONSTEXPR function_ref<R(Args...)> &operator =(F &&f) noexcept {
173173 obj_ = reinterpret_cast <void *>(std::addressof (f));
174174 callback_ = [](void *obj, Args... args) {
175- return detail::invoke (
175+ return detail::fnref:: invoke (
176176 *reinterpret_cast <typename std::add_pointer<F>::type>(obj),
177177 std::forward<Args>(args)...);
178178 };
0 commit comments