@@ -101,8 +101,6 @@ class any {
101 class closure {
101 class closure {
103 virtual auto operator()(const any&) const -> any = 0;
103 virtual auto operator()(const any&) const -> any = 0;
104− virtual auto operator()(const any&, const any&) const -> any = 0;
105− virtual auto operator()(const any&, const any&, const any&) const -> any = 0;
106 virtual ~closure() {}
104 virtual ~closure() {}
@@ -114,52 +112,6 @@ class any {
114 auto operator()(const any& arg) const -> any {
112 auto operator()(const any& arg) const -> any {
115 return lambda(arg);
113 return lambda(arg);
117− auto operator()(const any& arg1, const any& arg2) const -> any {
118− return lambda(arg1)(arg2);
120− auto operator()(const any& arg1, const any& arg2, const any& arg3) const -> any {
121− return lambda(arg1)(arg2)(arg3);
125− template <typename T>
126− class _closure2 : public closure {
129− _closure2(const T& l) noexcept : lambda(l) {}
130− auto operator()(const any& arg1) const -> any {
131− return [=](const any& arg2) -> any {
132− return lambda(arg1, arg2);
135− auto operator()(const any& arg1, const any& arg2) const -> any {
136− return lambda(arg1, arg2);
138− auto operator()(const any& arg1, const any& arg2, const any& arg3) const -> any {
139− return lambda(arg1, arg2)(arg3);
143− template <typename T>
144− class _closure3 : public closure {
147− _closure3(const T& l) noexcept : lambda(l) {}
148− auto operator()(const any& arg1) const -> any {
149− return [=](const any& arg2) -> any {
150− return [=](const any& arg3) -> any {
151− return lambda(arg1, arg2, arg3);
155− auto operator()(const any& arg1, const any& arg2) const -> any {
156− return [=](const any& arg3) -> any {
157− return lambda(arg1, arg2, arg3);
160− auto operator()(const any& arg1, const any& arg2, const any& arg3) const -> any {
161− return lambda(arg1, arg2, arg3);
165 class eff_fn {
117 class eff_fn {
@@ -243,19 +195,6 @@ class any {
243 any(const T& val, typename std::enable_if<std::is_assignable<std::function<any(const any&)>,T>::value>::type* = 0)
195 any(const T& val, typename std::enable_if<std::is_assignable<std::function<any(const any&)>,T>::value>::type* = 0)
244 : type(Type::Closure), is_shared(true), l(make_shared<_closure<T>>(val)) {}
196 : type(Type::Closure), is_shared(true), l(make_shared<_closure<T>>(val)) {}
246− template <typename T, typename = typename std::enable_if<!std::is_same<any,T>::value &&
247− !std::is_convertible<T,fn>::value>::type>
248− any(const T& val, typename std::enable_if<std::is_assignable<std::function<any(const any&,
249− const any&)>,T>::value>::type* = 0)
250− : type(Type::Closure), is_shared(true), l(make_shared<_closure2<T>>(val)) {}
252− template <typename T, typename = typename std::enable_if<!std::is_same<any,T>::value &&
253− !std::is_convertible<T,fn>::value>::type>
254− any(const T& val, typename std::enable_if<std::is_assignable<std::function<any(const any&,
256− const any&)>,T>::value>::type* = 0)
257− : type(Type::Closure), is_shared(true), l(make_shared<_closure3<T>>(val)) {}
259 template <typename T>
198 template <typename T>
260 any(const T& val, typename std::enable_if<std::is_assignable<std::function<any()>,T>::value>::type* = 0)
199 any(const T& val, typename std::enable_if<std::is_assignable<std::function<any()>,T>::value>::type* = 0)
261 : type(Type::EffFunction), is_shared(true), e(make_shared<_eff_fn<T>>(val)) {}
200 : type(Type::EffFunction), is_shared(true), e(make_shared<_eff_fn<T>>(val)) {}
@@ -360,11 +299,7 @@ class any {
362 auto operator()(const any&) const -> any;
301 auto operator()(const any&) const -> any;
363− auto operator()(const any&, const any&) const -> any;
364− auto operator()(const any&, const any&, const any&) const -> any;
366 auto operator()(const as_thunk) const -> const any&;
302 auto operator()(const as_thunk) const -> const any&;
368 auto operator()() const -> any;
303 auto operator()() const -> any;
370 operator long() const;
305 operator long() const;