12#ifndef RANGES_V3_DETAIL_WITH_BRACED_INIT_ARGS_HPP
13#define RANGES_V3_DETAIL_WITH_BRACED_INIT_ARGS_HPP
15#include <initializer_list>
19#include <range/v3/detail/prologue.hpp>
28 template<
typename ImplFn>
29 struct with_braced_init_args : ImplFn
32 constexpr ImplFn
const & base()
const
38 using ImplFn::operator();
40 template<
typename V0,
typename... Args>
41 constexpr invoke_result_t<ImplFn const &, std::initializer_list<V0>, Args...>
42 operator()(std::initializer_list<V0> && rng0, Args &&... args)
const
44 return base()(
static_cast<std::initializer_list<V0> &&
>(rng0),
45 static_cast<Args &&
>(args)...);
48 template<
typename Rng0,
typename V1,
typename... Args>
49 constexpr invoke_result_t<ImplFn
const &,
51 std::initializer_list<V1>,
53 operator()(Rng0 && rng0, std::initializer_list<V1> && rng1, Args &&... args)
57 static_cast<Rng0 &&
>(rng0),
58 static_cast<std::initializer_list<V1> &&
>(rng1),
59 static_cast<Args &&
>(args)...);
62 template<
typename V0,
typename V1,
typename... Args>
63 constexpr invoke_result_t<ImplFn
const &,
64 std::initializer_list<V0>,
65 std::initializer_list<V1>,
67 operator()(std::initializer_list<V0> && rng0,
68 std::initializer_list<V1> && rng1,
69 Args &&... args)
const
72 static_cast<std::initializer_list<V0> &&
>(rng0),
73 static_cast<std::initializer_list<V1> &&
>(rng1),
74 static_cast<Args &&
>(args)...);
81#include <range/v3/detail/epilogue.hpp>