
John Maddock wrote:
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?
I'm sympathetic towards (2), but it means making type_traits depend upon <string> and all that brings in (I've just checked and the header doesn't pull <string> in at present). It seems a shame to make VC7 unsupported, just for the lack of an include however.
What does anyone else think? Note that the dependency on <string> would be for broken compilers *only*.
Isn't it technically possible to forward-declared basic_string and specialize on that? I can't find anything in the standard to prohibit specializing on incomplete type. And restriction on putting declarations to "namespace std" is not enforced. - Volodya