Boost logo

Boost :

Subject: Re: [boost] how to distinguish between const char* and const char[N]
From: Marshall Clow (mclow.lists_at_[hidden])
Date: 2010-12-19 19:52:15


On Dec 19, 2010, at 4:43 PM, Jeffrey Lee Hellrung, Jr. wrote:
>>
>> The second call to bar should extract the length at compile time, e.g.
>>
>> template <size_t length> void bar(const char (&data)[length]) {...}
>>
>> The problem is that in the presence of the first variant (void bar(const
>> char*))
>> the second variant does not get called.
>>
>> -Jochen
>
> In addition to Dave's solution, it looks like if your overloads look like
>
> void bar(char const *&); // note the &
> template< std::size_t N >
> void bar(char const (&)[N]);
>
> then the latter will be selected when passed a string literal. Seems to work on MSVC9 anyway...

The Sun Solaris compiler doesn't seem to handle the "char const (&)[N]" syntax.
I had to work around it in Boost.Array (look in array.hpp starting about line 349)

Just a data point for you.

-- Marshall


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