@@ -251,14 +251,9 @@ class any {
251 any(T&& val, typename std::enable_if<std::is_assignable<managed<void>,T>::value>::type* = 0) noexcept
251 any(T&& val, typename std::enable_if<std::is_assignable<managed<void>,T>::value>::type* = 0) noexcept
252 : tag(Tag::Pointer), p(std::move(val)) {}
252 : tag(Tag::Pointer), p(std::move(val)) {}
254− // Explicit void* to raw pointer value
255− template <typename T>
256− any(const T& val, typename std::enable_if<std::is_same<T,void*>::value>::type* = 0) noexcept
257− : tag(Tag::RawPointer), v(val) {}
254+ any(void * val) noexcept : tag(Tag::RawPointer), v(val) {}
259 any(nullptr_t) noexcept : tag(Tag::RawPointer), v(nullptr) {}
255 any(nullptr_t) noexcept : tag(Tag::RawPointer), v(nullptr) {}
262#if !defined(USE_GC)
257#if !defined(USE_GC)
264 auto destruct() const noexcept -> void {
259 auto destruct() const noexcept -> void {
@@ -337,6 +332,17 @@ class any {
337 operator const array&() const;
332 operator const array&() const;
338 operator const record&() const;
333 operator const record&() const;
335+ operator void *() const {
336+ return extractPointer(IF_DEBUG(Tag::RawPointer));
339+ template <typename T,
340+ typename = typename std::enable_if<std::is_pointer<T>::value &&
341+ std::is_class<typename std::remove_pointer<T>::type>::value>::type>
342+ operator T() const {
343+ return static_cast<T>(extractPointer(IF_DEBUG(Tag::RawPointer)));
340 auto operator[](const size_t) const -> const any&;
346 auto operator[](const size_t) const -> const any&;
341 auto at(const char *) const -> const any&;
347 auto at(const char *) const -> const any&;
342 auto size() const -> size_t;
348 auto size() const -> size_t;