Gennadiy Rozental wrote: > > > Also I think we need free function form of value > > > extraction. In other case it would be difficult to place extract > > > in context where template parameter is deduced. And check function > > > is not that important in most cases. > > > > While I am again considering a free function, I'm not sure what > > difference it makes. Please elaborate. > > template<typename T> > void foo( T const& ) > { > .... > } > > int main() > { > boost::variant<int,.....> v = 5; > > // Here I want to pass const reference to integer value of variant to > function foo > // foo( get<int>( v ) ); - type T is incorrect > foo( ??? ); > }
I don't see why this wouldn't work. What is "incorrect" regarding type T? The current boost::extract<T> contains an implicit-cast operator to T. Please explain. (Note, however, that the implicit-cast doesn't work on MSVC, so I am likely to seek a new approach altogether anyhow.) > > Also, I think the functionality offered in extract::check is quite > > important. Unlike visitation, extract (or get, or whatever) handles > > only one of several possible states of the given variant object. > > But you are calling check inside access method and throw an exception in > case of error. It should be enough in most cases IMO. Did I get you wrong. I see it as the difference between dynamic_cast with a reference type versus a pointer type. That is, the reference-based dynamic_cast throws, which as you note, works fine. But the pointer-based dynamic_cast provides a non-throwing mechanism as well (returns a null pointer). Thus, extract::check is the non-throwing analogue for extract. Let me know what you think. Thanks, Eric _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost