@@ -44,6 +44,7 @@ struct base_any_policy
44
44
virtual void clone (void * const * src, void ** dest) = 0;
45
45
virtual void move (void * const * src, void ** dest) = 0;
46
46
virtual void * get_value (void ** src) = 0;
47
+ virtual void * get_value (void * const * src) = 0;
47
48
virtual ::size_t get_size () = 0;
48
49
virtual const std::type_info& type () = 0;
49
50
virtual void print (std::ostream& out, void * const * src) = 0;
@@ -68,6 +69,7 @@ struct small_any_policy : typed_base_any_policy<T>
68
69
virtual void clone (void * const * src, void ** dest) { *dest = *src; }
69
70
virtual void move (void * const * src, void ** dest) { *dest = *src; }
70
71
virtual void * get_value (void ** src) { return reinterpret_cast <void *>(src); }
72
+ virtual void * get_value (void * const * src) { return const_cast <void *>( reinterpret_cast <const void *>(src) ); }
71
73
virtual void print (std::ostream& out, void * const * src) { out << *reinterpret_cast <T const *>(src); }
72
74
};
73
75
@@ -92,6 +94,7 @@ struct big_any_policy : typed_base_any_policy<T>
92
94
**reinterpret_cast <T**>(dest) = **reinterpret_cast <T* const *>(src);
93
95
}
94
96
virtual void * get_value (void ** src) { return *src; }
97
+ virtual void * get_value (void * const * src) { return const_cast <void *>(*src); }
95
98
virtual void print (std::ostream& out, void * const * src) { out << *reinterpret_cast <T const *>(*src); }
96
99
};
97
100
@@ -242,8 +245,7 @@ class any
242
245
const T& cast () const
243
246
{
244
247
if (policy->type () != typeid (T)) throw anyimpl::bad_any_cast ();
245
- void * obj = const_cast <void *>(object);
246
- T* r = reinterpret_cast <T*>(policy->get_value (&obj));
248
+ T* r = reinterpret_cast <T*>(policy->get_value (&object));
247
249
return *r;
248
250
}
249
251
0 commit comments