Boost logo

Boost :

Subject: Re: [boost] how to distinguish between const char* and const char[N]
From: Jeffrey Lee Hellrung, Jr. (jhellrung_at_[hidden])
Date: 2010-12-19 19:43:37

On 12/19/2010 3:21 PM, Jochen Wilhelmy wrote:
> Hi!
> is there a (possibly boost powered) way of distinguishing between
> const char* and const char[N]?
> e.g.
> const char* foo = "foo";
> bar(foo);
> bar("foo");
> 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...

- Jeff

Boost list run by bdawes at, gregod at, cpdaniel at, john at