@@ -101,8 +101,6 @@ class any {
101101 class closure {
102102 public:
103103 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;
106104 virtual ~closure() {}
107105 };
108106
@@ -114,52 +112,6 @@ class any {
114112 auto operator()(const any& arg) const -> any {
115113 return lambda(arg);
116114 }
117− auto operator()(const any& arg1, const any& arg2) const -> any {
118− return lambda(arg1)(arg2);
119− }
120− auto operator()(const any& arg1, const any& arg2, const any& arg3) const -> any {
121− return lambda(arg1)(arg2)(arg3);
122− }
123− };
124−
125− template <typename T>
126− class _closure2 : public closure {
127− const T lambda;
128− public:
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);
133− };
134− }
135− auto operator()(const any& arg1, const any& arg2) const -> any {
136− return lambda(arg1, arg2);
137− }
138− auto operator()(const any& arg1, const any& arg2, const any& arg3) const -> any {
139− return lambda(arg1, arg2)(arg3);
140− }
141− };
142−
143− template <typename T>
144− class _closure3 : public closure {
145− const T lambda;
146− public:
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);
152− };
153− };
154− }
155− auto operator()(const any& arg1, const any& arg2) const -> any {
156− return [=](const any& arg3) -> any {
157− return lambda(arg1, arg2, arg3);
158− };
159− }
160− auto operator()(const any& arg1, const any& arg2, const any& arg3) const -> any {
161− return lambda(arg1, arg2, arg3);
162− }
163115 };
164116
165117 class eff_fn {
@@ -243,19 +195,6 @@ class any {
243195 any(const T& val, typename std::enable_if<std::is_assignable<std::function<any(const any&)>,T>::value>::type* = 0)
244196 : type(Type::Closure), is_shared(true), l(make_shared<_closure<T>>(val)) {}
245197
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)) {}
251−
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&,
255− const any&,
256− const any&)>,T>::value>::type* = 0)
257− : type(Type::Closure), is_shared(true), l(make_shared<_closure3<T>>(val)) {}
258−
259198 template <typename T>
260199 any(const T& val, typename std::enable_if<std::is_assignable<std::function<any()>,T>::value>::type* = 0)
261200 : type(Type::EffFunction), is_shared(true), e(make_shared<_eff_fn<T>>(val)) {}
@@ -360,11 +299,7 @@ class any {
360299 }
361300
362301 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;
365−
366302 auto operator()(const as_thunk) const -> const any&;
367−
368303 auto operator()() const -> any;
369304
370305 operator long() const;