VCCC  2024.05
VisualCamp Common C++ library
indirect_result_t.hpp
Go to the documentation of this file.
1 //
2 // Created by yonggyulee on 2023/12/29.
3 //
4 
5 #ifndef VCCC_ITERATOR_INDIRECT_RESULT_T_HPP
6 #define VCCC_ITERATOR_INDIRECT_RESULT_T_HPP
7 
14 
15 namespace vccc {
16 namespace detail {
17 
18 template<bool /* true */, typename F, typename... Is>
19 struct indirect_result_impl_2 {
20  using type = invoke_result_t<F, iter_reference_t<Is>...>;
21 };
22 
23 template<typename F, typename... Is>
24 struct indirect_result_impl_2<false, F, Is...> {};
25 
26 template<bool /* true */, typename F, typename... Is>
27 struct indirect_result_impl_1
28  : indirect_result_impl_2<
29  invocable<F, iter_reference_t<Is>...>::value,
30  F,
31  Is...
32  > {};
33 
34 template<typename F, typename... Is>
35 struct indirect_result_impl_1<false, F, Is...> {};
36 
37 } // namespace detail
38 
41 
42 template<typename F, typename... Is>
44  : detail::indirect_result_impl_1<
45  conjunction<
46  indirectly_readable<Is>...,
47  has_typename_type<iter_reference<Is>>...
48  >::value,
49  F,
50  Is...
51  > {};
52 
53 template<typename F, typename... Is>
54 using indirect_result_t = typename indirect_result<F, Is...>::type;
55 
57 
58 } // namespace vccc
59 
60 #endif // VCCC_ITERATOR_INDIRECT_RESULT_T_HPP
typename indirect_result< F, Is... >::type indirect_result_t
Definition: indirect_result_t.hpp:54
Definition: directory.h:12
Definition: indirect_result_t.hpp:51