Type inference and overloaded functions
bearophile
bearophileHUGS at lycos.com
Wed Dec 11 11:51:23 PST 2013
Namespace:
> void main() {
> int[] arr0 = [1, 2, 3];
> assert(is(typeof(arr0) == int[]));
> assert(arr0 == [1, 2, 3]);
>
> int[3] arr1 = [4, 5, 6]s;
> assert(is(typeof(arr1) == int[3]));
> assert(arr1 == [4, 5, 6]);
>
> int[] arr2 = [7, 8, 9]s;
> assert(is(typeof(arr2) == int[/*3*/]));
> assert(arr2 == [7, 8, 9]);
>
> int[$] arr_a1 = [54, 74, 90, 2010];
> assert(is(typeof(arr_a1) == int[4]));
> assert(arr_a1 == [54, 74, 90, 2010]);
>
> int[$] arr_a2 = [2010, 90, 74, 54]s;
> assert(is(typeof(arr_a2) == int[4]));
> assert(arr_a2 == [2010, 90, 74, 54]);
>
> foo([1, 2, 3]);
> foo([4, 5, 6]s);
>
> bar([44, 55, 66]s);
>
> auto arr3 = [111, 222, 333];
> assert(is(typeof(arr3) == int[]));
>
> auto arr4 = [444, 555, 666]s;
> assert(is(typeof(arr4) == int[3]));
>
> quatz([3, 2, 1]);
> quatz([8, 7, 6]s);
> }
Very good, this seems a step forward for D. Are you going to
create two pull requests for dmd? (it will not be accepted before
dmd 2.066).
Is it also guarding against this?
http://d.puremagic.com/issues/show_bug.cgi?id=3849
That in short is this mistake (this currently doesn't give
errors):
string[3] a = ["red""green","blue"];
void main() {}
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list