2020namespace hpx ::traits {
2121
2222 // /////////////////////////////////////////////////////////////////////////
23- HPX_CXX_CORE_EXPORT template <typename T, typename Enable = void >
23+ template <typename T, typename Enable = void >
2424 struct projected_iterator
2525 {
2626 using type = std::decay_t <T>;
2727 };
2828
2929 // For segmented iterators, we consider the local_raw_iterator instead of
3030 // the given one.
31- HPX_CXX_CORE_EXPORT template <typename Iterator>
31+ template <typename Iterator>
3232 struct projected_iterator <Iterator,
3333 std::enable_if_t <is_segmented_iterator_v<Iterator>>>
3434 {
@@ -39,14 +39,14 @@ namespace hpx::traits {
3939 local_iterator>::local_raw_iterator;
4040 };
4141
42- HPX_CXX_CORE_EXPORT template <typename Iterator>
42+ template <typename Iterator>
4343 struct projected_iterator <Iterator,
4444 std::void_t <typename std::decay_t <Iterator>::proxy_type>>
4545 {
4646 using type = typename std::decay_t <Iterator>::proxy_type;
4747 };
4848
49- HPX_CXX_CORE_EXPORT template <typename Iterator>
49+ template <typename Iterator>
5050 using projected_iterator_t = typename projected_iterator<Iterator>::type;
5151} // namespace hpx::traits
5252
@@ -55,18 +55,17 @@ namespace hpx::parallel::traits {
5555 // /////////////////////////////////////////////////////////////////////////
5656 namespace detail {
5757
58- HPX_CXX_CORE_EXPORT template <typename F, typename Iter,
59- typename Enable = void >
58+ template <typename F, typename Iter, typename Enable = void >
6059 struct projected_result_of ;
6160
62- HPX_CXX_CORE_EXPORT template <typename Proj, typename Iter>
61+ template <typename Proj, typename Iter>
6362 struct projected_result_of <Proj, Iter,
6463 std::enable_if_t <hpx::traits::is_iterator_v<Iter>>>
6564 : hpx::util::invoke_result<Proj, hpx::traits::iter_reference_t <Iter>>
6665 {
6766 };
6867
69- HPX_CXX_CORE_EXPORT template <typename Projected>
68+ template <typename Projected>
7069 struct projected_result_of_indirect
7170 : projected_result_of<typename Projected::projector_type,
7271 typename Projected::iterator_type>
@@ -77,8 +76,7 @@ namespace hpx::parallel::traits {
7776 // This is being instantiated if a vector pack execution policy is used
7877 // with a zip_iterator. In this case the function object is invoked
7978 // with a tuple<datapar<T>...> instead of just a tuple<T...>
80- HPX_CXX_CORE_EXPORT template <typename Proj, typename ValueType,
81- typename Enable = void >
79+ template <typename Proj, typename ValueType, typename Enable = void >
8280 struct projected_result_of_vector_pack_
8381 : hpx::util::invoke_result<Proj,
8482 typename hpx::parallel::traits::vector_pack_load<
@@ -88,11 +86,10 @@ namespace hpx::parallel::traits {
8886 {
8987 };
9088
91- HPX_CXX_CORE_EXPORT template <typename Projected,
92- typename Enable = void >
89+ template <typename Projected, typename Enable = void >
9390 struct projected_result_of_vector_pack ;
9491
95- HPX_CXX_CORE_EXPORT template <typename Projected>
92+ template <typename Projected>
9693 struct projected_result_of_vector_pack <Projected,
9794 std::void_t <typename Projected::iterator_type>>
9895 : projected_result_of_vector_pack_<typename Projected::projector_type,
@@ -102,8 +99,7 @@ namespace hpx::parallel::traits {
10299#endif
103100 } // namespace detail
104101
105- HPX_CXX_CORE_EXPORT template <typename F, typename Iter,
106- typename Enable = void >
102+ template <typename F, typename Iter, typename Enable = void >
107103 struct projected_result_of
108104 : detail::projected_result_of<std::decay_t <F>, std::decay_t <Iter>>
109105 {
@@ -112,8 +108,7 @@ namespace hpx::parallel::traits {
112108 // /////////////////////////////////////////////////////////////////////////
113109 namespace detail {
114110
115- HPX_CXX_CORE_EXPORT template <typename F, typename Iter,
116- typename Enable = void >
111+ template <typename F, typename Iter, typename Enable = void >
117112 struct is_projected : std::false_type
118113 {
119114 };
@@ -123,7 +118,7 @@ namespace hpx::parallel::traits {
123118 // void
124119
125120 // clang-format off
126- HPX_CXX_CORE_EXPORT template <typename Proj, typename Iter>
121+ template <typename Proj, typename Iter>
127122 struct is_projected <Proj, Iter,
128123 std::enable_if_t <
129124 hpx::traits::is_iterator_v<Iter> &&
@@ -136,13 +131,12 @@ namespace hpx::parallel::traits {
136131 };
137132 // clang-format on
138133
139- HPX_CXX_CORE_EXPORT template <typename Projected,
140- typename Enable = void >
134+ template <typename Projected, typename Enable = void >
141135 struct is_projected_indirect : std::false_type
142136 {
143137 };
144138
145- HPX_CXX_CORE_EXPORT template <typename Projected>
139+ template <typename Projected>
146140 struct is_projected_indirect <Projected,
147141 std::void_t <typename Projected::projector_type>>
148142 : detail::is_projected<typename Projected::projector_type,
@@ -151,36 +145,35 @@ namespace hpx::parallel::traits {
151145 };
152146 } // namespace detail
153147
154- HPX_CXX_CORE_EXPORT template <typename F, typename Iter,
155- typename Enable = void >
148+ template <typename F, typename Iter, typename Enable = void >
156149 struct is_projected
157150 : detail::is_projected<std::decay_t <F>,
158151 hpx::traits::projected_iterator_t <Iter>>
159152 {
160153 };
161154
162- HPX_CXX_CORE_EXPORT template <typename F, typename Iter>
155+ template <typename F, typename Iter>
163156 inline constexpr bool is_projected_v = is_projected<F, Iter>::value;
164157
165158 // /////////////////////////////////////////////////////////////////////////
166- HPX_CXX_CORE_EXPORT template <typename Proj, typename Iter>
159+ template <typename Proj, typename Iter>
167160 struct projected
168161 {
169162 using projector_type = std::decay_t <Proj>;
170163 using iterator_type = hpx::traits::projected_iterator_t <Iter>;
171164 };
172165
173- HPX_CXX_CORE_EXPORT template <typename Projected, typename Enable = void >
166+ template <typename Projected, typename Enable = void >
174167 struct is_projected_indirect : detail::is_projected_indirect<Projected>
175168 {
176169 };
177170
178- HPX_CXX_CORE_EXPORT template <typename Projected, typename Enable = void >
171+ template <typename Projected, typename Enable = void >
179172 struct is_projected_zip_iterator : std::false_type
180173 {
181174 };
182175
183- HPX_CXX_CORE_EXPORT template <typename Projected>
176+ template <typename Projected>
184177 struct is_projected_zip_iterator <Projected,
185178 std::void_t <typename Projected::iterator_type>>
186179 : hpx::traits::is_zip_iterator<typename Projected::iterator_type>
@@ -190,19 +183,18 @@ namespace hpx::parallel::traits {
190183 // /////////////////////////////////////////////////////////////////////////
191184 namespace detail {
192185
193- HPX_CXX_CORE_EXPORT template <typename F, typename ... Args>
186+ template <typename F, typename ... Args>
194187 struct is_indirect_callable_impl : hpx::is_invocable<F, Args...>
195188 {
196189 };
197190
198- HPX_CXX_CORE_EXPORT template <typename ExPolicy, typename F,
199- typename ProjectedPack, typename Enable = void >
191+ template <typename ExPolicy, typename F, typename ProjectedPack ,
192+ typename Enable = void >
200193 struct is_indirect_callable : std::false_type
201194 {
202195 };
203196
204- HPX_CXX_CORE_EXPORT template <typename ExPolicy, typename F,
205- typename ... Projected>
197+ template <typename ExPolicy, typename F, typename ... Projected>
206198 struct is_indirect_callable <ExPolicy, F, hpx::util::pack<Projected...>,
207199 std::enable_if_t <
208200 hpx::util::all_of_v<is_projected_indirect<Projected>...> &&
@@ -218,8 +210,7 @@ namespace hpx::parallel::traits {
218210 // Vector pack execution policies used with zip-iterators require
219211 // special handling because zip_iterator<>::reference is not a real
220212 // reference type.
221- HPX_CXX_CORE_EXPORT template <typename ExPolicy, typename F,
222- typename ... Projected>
213+ template <typename ExPolicy, typename F, typename ... Projected>
223214 struct is_indirect_callable <ExPolicy, F, hpx::util::pack<Projected...>,
224215 std::enable_if_t <
225216 hpx::util::all_of_v<is_projected_indirect<Projected>...> &&
@@ -232,16 +223,14 @@ namespace hpx::parallel::traits {
232223#endif
233224 } // namespace detail
234225
235- HPX_CXX_CORE_EXPORT template <typename ExPolicy, typename F,
236- typename ... Projected>
226+ template <typename ExPolicy, typename F, typename ... Projected>
237227 struct is_indirect_callable
238228 : detail::is_indirect_callable<std::decay_t <ExPolicy>, std::decay_t <F>,
239229 hpx::util::pack<std::decay_t <Projected>...>>
240230 {
241231 };
242232
243- HPX_CXX_CORE_EXPORT template <typename ExPolicy, typename F,
244- typename ... Projected>
233+ template <typename ExPolicy, typename F, typename ... Projected>
245234 inline constexpr bool is_indirect_callable_v =
246235 is_indirect_callable<ExPolicy, F, Projected...>::value;
247236} // namespace hpx::parallel::traits
0 commit comments