@@ -141,7 +141,8 @@ class any {
141 any(const shared<fn>& val) : type(Type::Function), f(val) {}
141 any(const shared<fn>& val) : type(Type::Function), f(val) {}
142 any(shared<fn>&& val) : type(Type::Function), f(std::move(val)) {}
142 any(shared<fn>&& val) : type(Type::Function), f(std::move(val)) {}
144− template <typename T>
144+ template <typename T,
145+ typename = typename std::enable_if<!std::is_same<any,T>::value>::type>
145 any(const T& val, typename std::enable_if<std::is_assignable<fn,T>::value>::type* = 0)
146 any(const T& val, typename std::enable_if<std::is_assignable<fn,T>::value>::type* = 0)
146 : type(Type::Function), f(make_shared<fn>(val)) {}
147 : type(Type::Function), f(make_shared<fn>(val)) {}
@@ -230,7 +231,7 @@ class any {
230 return nullptr;
231 return nullptr;
233− auto operator()(const any) const -> any;
234+ auto operator()(const any&) const -> any;
235 auto operator()(const as_thunk) const -> const any&;
236 auto operator()(const as_thunk) const -> const any&;