endsWith() doesn't work with const(wchar[])s
Steven Schveighoffer
schveiguy at yahoo.com
Fri Jan 14 05:22:41 PST 2011
On Fri, 14 Jan 2011 02:21:03 -0500, %u <wfunction at hotmail.com> wrote:
>> Regardless, a fully const array is never going to work with a function
>> like
> endsWith() for the simple reason that such functions have to actually be
> able to
> process the range that they're given, and if the range is const, you
> can't call
> popFront() or popBack() on it, so it just isn't going to work.
>> Now, if you take a _slice_ of a const array, it should work, because
>> while the
> elements of the array will remain const, the slice itself won't be, so
> endsWith()
> can process it.
The issue is that IFTI uses exactly the type used to call it.
void foo(T)(T t)
{
writeln(typeid(T));
}
const(int[]) x = [1,2,3];
foo(x); // prints const(int[])
What you really want is for IFTI to strip down const/immutable on arrays
and basic types. I think it's a bugzilla bug somewhere, if not it's
definitely been discussed on the phobos mailing list.
>
> I see what's happening, but the problem with slicing is that it doesn't
> prevent a
> resize of the array, which, if not allocated with GC memory, could break
> code. How
> can you have a non-resizeable slice, while still maintaining the
> constness of an
> array? Is that even possible?
Since 2.041, this cannot happen. A resize of a slice where data will be
overwritten from the original array always results in a reallocation.
-Steve
More information about the Digitalmars-d
mailing list