File indexing completed on 2025-12-16 10:27:56
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef RANGES_V3_DETAIL_WITH_BRACED_INIT_ARGS_HPP
0013 #define RANGES_V3_DETAIL_WITH_BRACED_INIT_ARGS_HPP
0014
0015 #include <initializer_list>
0016
0017 #include <range/v3/functional/invoke.hpp>
0018
0019 #include <range/v3/detail/prologue.hpp>
0020
0021 namespace ranges
0022 {
0023
0024 namespace detail
0025 {
0026
0027
0028 template<typename ImplFn>
0029 struct with_braced_init_args : ImplFn
0030 {
0031 private:
0032 constexpr ImplFn const & base() const
0033 {
0034 return *this;
0035 }
0036
0037 public:
0038 using ImplFn::operator();
0039
0040 template<typename V0, typename... Args>
0041 constexpr invoke_result_t<ImplFn const &, std::initializer_list<V0>, Args...>
0042 operator()(std::initializer_list<V0> && rng0, Args &&... args) const
0043 {
0044 return base()(static_cast<std::initializer_list<V0> &&>(rng0),
0045 static_cast<Args &&>(args)...);
0046 }
0047
0048 template<typename Rng0, typename V1, typename... Args>
0049 constexpr invoke_result_t<ImplFn const &,
0050 Rng0,
0051 std::initializer_list<V1>,
0052 Args...>
0053 operator()(Rng0 && rng0, std::initializer_list<V1> && rng1, Args &&... args)
0054 const
0055 {
0056 return base()(
0057 static_cast<Rng0 &&>(rng0),
0058 static_cast<std::initializer_list<V1> &&>(rng1),
0059 static_cast<Args &&>(args)...);
0060 }
0061
0062 template<typename V0, typename V1, typename... Args>
0063 constexpr invoke_result_t<ImplFn const &,
0064 std::initializer_list<V0>,
0065 std::initializer_list<V1>,
0066 Args...>
0067 operator()(std::initializer_list<V0> && rng0,
0068 std::initializer_list<V1> && rng1,
0069 Args &&... args) const
0070 {
0071 return base()(
0072 static_cast<std::initializer_list<V0> &&>(rng0),
0073 static_cast<std::initializer_list<V1> &&>(rng1),
0074 static_cast<Args &&>(args)...);
0075 }
0076 };
0077 }
0078
0079 }
0080
0081 #include <range/v3/detail/epilogue.hpp>
0082
0083 #endif