Generic collection/element function signatures in D2 versus D1
Nick Sabalausky
a at a.a
Sat Sep 11 21:32:52 PDT 2010
"Jacob Carlborg" <doob at me.com> wrote in message
news:i5t61q$2j76$1 at digitalmars.com...
>
> If you're not going to modify the content of the array I think this will
> work:
>
> void foo (T) (const(T)[] collection, T elem) {}
>
> This will allow both mutable, immutable and const arrays. But it will not
> let you modify the array like this:
>
> collection[3] = 'a';
>
On DMD 2.048, This isn't working for me:
-----------------------------------------
void foo(T)(const(T)[] coll, T elem)
{
}
void main()
{
string x = "hello";
foo(x, x[1]);
}
-----------------------------------------
Result:
-----------------------------------------
testStringAndChar.d(8): Error: template testStringAndChar.foo(T) does not
match any function template declaration
testStringAndChar.d(8): Error: template testStringAndChar.foo(T) cannot
deduce template function from argument types !()(string,immutable(char))
-----------------------------------------
I figured that was just because 'const(immutable(T))[]' doesn't make much
sence, so I tried this and got the exact same error messages:
-----------------------------------------
import std.traits;
void foo(T)(const(Unqual!T)[] coll, T elem)
{
}
void main()
{
string x = "hello";
foo(x, x[1]);
}
-----------------------------------------
It seems to be a problem with IFTI, because this does work with both
versions:
foo!char(x, x[1]);
Kind of a pain.
More information about the Digitalmars-d-learn
mailing list