I want boost::any_cast<T> to only throw an exception when the type of the any doesn’t have an implicit conversion to T. The normal behaviour seems to be to throw an exception if the type of the any is not T, regardless of implicit conversions.
Example:
boost::any a = 1; boost::any_cast<int>(a); // This succeeds, and rightfully so boost::any_cast<long>(a); // I don't want this to throw boost::any_cast<Widget>(a); // I want this to throw
Could anyone tell me if there’s a simple way to get the functionality I want, or better yet give me a good reason for why the existing behaviour is the way it is?
Well you can’t do it. The
anymechanism works like this:I hope it’s clear what the above does. There is no way you could do what you are looking for i think. The reason is that there is no information about the type kept that could prove useful here. RTTI doesn’t provide it.