Re: container vs standard array
On Tuesday, 19 September 2023 at 20:20:17 UTC, Nick Treleaven wrote: On Tuesday, 19 September 2023 at 19:57:34 UTC, Nick Treleaven wrote: This is because a single array can be passed to a typesafe variadic parameter rather than elements of that array type. And then immutable(char) doesn't convert to string. I think a non-variadic overload could be added to make it work as expected. https://github.com/dlang/phobos/pull/8818 Thank you very much.
Re: container vs standard array
On Tuesday, 19 September 2023 at 19:57:34 UTC, Nick Treleaven wrote: This is because a single array can be passed to a typesafe variadic parameter rather than elements of that array type. And then immutable(char) doesn't convert to string. I think a non-variadic overload could be added to make it work as expected. https://github.com/dlang/phobos/pull/8818
Re: container vs standard array
On Tuesday, 19 September 2023 at 06:35:01 UTC, JG wrote: On Tuesday, 19 September 2023 at 00:34:01 UTC, vino wrote: //auto a = Array!string("Aname"); // throws error auto b = Array!char("Bname");// works auto c = Array!string("Aname", "Bname"); // works ... Looks to me like when it receives a single range it expects the elements of that range to match the type. Yes, the first overload fails to match because U is inferred as immutable(char) rather than string: this(U)(U[] values...) if (isImplicitlyConvertible!(U, T)) This is because a single array can be passed to a typesafe variadic parameter rather than elements of that array type. And then immutable(char) doesn't convert to string. I think a non-variadic overload could be added to make it work as expected.
Re: container vs standard array
On Tuesday, 19 September 2023 at 00:34:01 UTC, vino wrote: Hi All, I am trying to understand as to why the below code is throwing error Code ``` import std.stdio: writeln; import std.container.array; void main () { //auto a = Array!string("Aname"); // throws error auto b = Array!char("Bname");// works auto c = Array!string("Aname", "Bname"); // works //writeln(a); writeln("Container Array :", b); writeln("Container Array :", c); writeln(); string[] d = ["Dname"]; // works string[] e = ["Dname", "Ename"]; // works writeln("Standard Array :", d); writeln("Standard Array :", e); } ``` From, Vino Looks to me like when it receives a single range it expects the elements of that range to match the type. If I am correct in the first one if you replace the "Aname" by ["Aname"] it should work