Titanion 0.4 + Phobos2 bug
Robert Jacques
sandford at jhu.edu
Tue Apr 28 08:06:12 PDT 2009
On Tue, 28 Apr 2009 05:06:23 -0400, bearophile <bearophileHUGS at lycos.com>
wrote:
> bearophile:
>> struct Vec(T=float, size_t N=3) {
>> static assert(N > 0);
>
> Sorry. Better to use:
>
>> struct Vec(T=float, int N=3) {
>> static assert(N > 0);
>
> From experience using D I have seen that using unsigned types is very
> unsafe in the current D language. In Delphi using unsigned types
> increases safety, in D actually decreases it. So in D it's better avoid
> unsigned type every time they aren't strictly necessary.
>
> Bye,
> bearophile
Well, in this case, N=-1 is both a compile time constant and doesn't
compile (static arrays have a max size of 16kb).
Anyways, here's an alternate version:
import std.conv: text;
struct _Vec(T:U[N],U,size_t N) {
T _data;
alias _data this;
string toString() { return text(_data); }
}
_Vec!(T) Vec(T)(T val)
if( is(_Vec!(T)) )
{
_Vec!(T) r = val;
return r;
}
Which simplifies use:
auto foo(T,size_t N)(T[N] v) {
// do stuff with v
return Vec(v);
}
although functions as array parameters doesn't allow setters, i.e.:
pos.x; // okay
pos.x = 5; // error
More information about the Digitalmars-d-announce
mailing list