Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-06-06 06:26:53


Vladimir Prus <ghost_at_[hidden]> writes:

> 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.

As long as you can be sure that the standard library implementation
hasn't added default parameters to basic_string, then yeah, you can do
that.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk