import std.stdio;
struct Array(T) {
T* ptr;
size_t length_;
size_t length() {return length_;}
void length(size_t l) {length_ = l; ptr = (new T[length_]).ptr;}
}
void func1(int[] ary) {
ary.length = 100;
}
void func2(Array!(int) ary) {
ary.length = 100;
}
void reffunc1(ref int[] ary) {
ary.length = 1000;
}
void reffunc2(ref Array!(int) ary) {
ary.length = 1000;
}
void main() {
// 1. 動的配列の場合
int[] ary1;
ary1.length = 10;
writefln("ary1.length == %d", ary1.length);
func1(ary1);
writefln("ary1.length == %d", ary1.length);
reffunc1(ary1);
writefln("ary1.length == %d", ary1.length);
// 2. 構造体の場合
Array!(int) ary2;
ary2.length = 10;
writefln("ary2.length == %d", ary2.length);
func2(ary2);
writefln("ary2.length == %d", ary2.length);
reffunc2(ary2);
writefln("ary2.length == %d", ary2.length);
}