tie

絶対誰かが既に書いてそうな気がするboost::tieっぽい奴。

import std.bind      : Tuple , tuple;
import std.typetuple : TypeTuple;
template add_pointer(T){alias T*add_pointer;}
template map(alias F){alias TypeTuple!() map;}
template map(alias F,T...){
	alias TypeTuple!(F!(T[0]),map!(F,T[1..$])) map;
}
struct Tie(T...){
	map!(add_pointer,T) value;
	void opAssign(Tuple!(T) value){*this = value.value;}
	void opAssign(T newValue){
		foreach(i,v;newValue)*value[i]=v;
	}
}
Tie!(T) tie(T...)(inout T value){
	Tie!(T) result;
	foreach(i,_;value)result.value[i] = &value[i];
	return result;
}
void main(){
	int x,y;
	tie(x,y) = tuple(100,20);
	printf("%d %d\n",x,y);
	tie(x,y) = TypeTuple!(y,x);
	printf("%d %d\n",x,y);
	tie(x,y) = tuple(y*10,x*10);
	printf("%d %d\n",x,y);
}

いやーstd.bindって本当に便利ですね!
D言語で自分が最近一番使うライブラリです。