V0.138

とりあえずD言語V0.138のオモシロそうな機能として,
"string"[constant]と"string"[constant..constant]が
定数になるというのが追加された。

これを応用すると[id:kurimura:20050521]に書いた奴がよりスマートに書ける。

template ULtoString(ulong n,int b:0){
	const ULtoString = .ULtoString!(n/10,n/10 < 10)
		~ "0123456789"[n%10..n%10+1];
}
template ULtoString(ulong n,int b){
	const ULtoString = "0123456789"[n%10..n%10+1];
}
template ULtoString(ulong n){
	alias .ULtoString!(n,n<10) ULtoString;
}
int main(){
	printf("%.*s",ULtoString!(1002));
	return 0;
}

んー書いてはみたがアマリ面白くない。
たぶん、これ以外にもオモロイ使い方あると思うんだけどなぁ
:追記
Newsgroupsで同じネタあったと、2chで聞いて、なんとなく悔しいので
文字列->数値の関数を自己満足で書いてみた

template SubString(T,int s,int e){
	typedef char[] SubString = T.init[s..e];
}
template Str2L_(T){
	static if(T.init.length == 0){
		const r = 0l;
	}else static if(T.init[0]=='-'){
		const r = -.Str2L_!(SubString!(
			T,1,T.init.length)).r;
	}else{
		const r = T.init[T.init.length-1]-'0'
			+ 10 * .Str2L_!(SubString!(
				T,0,T.init.length-1)).r;
	}
}
template Str2L(T){
	alias Str2L_!(T).r Str2L;
}
int main(){
	typedef char[]str ="-232";
	printf("%lld",Str2L!(str));
	return 0;
}

…SubString関数とか書いてると
template用の文字列操作ライブラリが欲しくなってきたなぁ。