
Hi, can anyone explain why an any_cast that adds a low-level const throws?? Example: char str[] = "a2"; boost::any ay(str); boost::any_cast<const char*>(ay); // throws, since a const is added!!! The only way to do this (without throwing), seems to be: boost::any_cast<char*>(ay); But why this mild "design deficiency"?? I call it "design deficiency", since the following is legal and works: char str2[] = "str2"; static_cast<const char *>(str2); So we should be able to add a low-level const, to make something read-only, right. Thanks for comments and explanations. n. Here's some test-code: /////// #include <iostream> #include <algorithm> #include <boost/any.hpp> int main() { char str[] = "a1"; boost::any ay(str); std::cout << "1 -- " << boost::any_cast<char *>(ay) << std::endl; strcpy(str, "a2"); /* throws!! */ //std::cout << "2 -- " << boost::any_cast<const char*>(ay) << std::endl; strcpy(str, "a3"); std::cout << "3 -- " << *boost::any_cast<char *>(&ay) << std::endl; strcpy(str, "a4"); /* segfault!! */ //std::cout << "4 -- " << *boost::any_cast<const char *>(&ay) << std::endl; char str2[] = "str2"; std::cout << "str2 -- " << static_cast<const char *>(str2) << std::endl; return 0; } ///////