
Hi, I get program_options failures on VC 7.0 that result from the following sequences of events: variable_map::as<string> is called any_cast<string&> is called the following code in any.hpp gives static assertion: typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref; #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // If 'nonref' is still reference type, it means the user has not // specialized 'remove_reference'. // Please use BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION macro // to generate specialization of remove_reference for your class // See type traits library documentation for details BOOST_STATIC_ASSERT(!is_reference<nonref>::value); The problem is that on VC 7.0 specializations for remove_reference must be defined explicitly, and it's not done for string and wstring. I see three choices: 1. Declare specialization for string and wstring in program_options 2. Declare them somewhere in type_traits 3. Mark 7.0 as unsupported. 4. Don't use any_cast to reference type I don't like (4) because I've introduced cast to reference myself explicitly for program_options sake. (1) can lead to conflicts with user code. So it leaves (2) and (3). Any opinions which one is better? - Volodya