class Hoge(T){
 this(){
  buf = new WrapperBase[0];
 }
 void chain(R)(R r){
  buf ~= new Wrapper!(R)(r);
 }
 /**/
private:
 static abstract class WrapperBase{}
 static class Wrapper(R)if(isForwardRange!(R)&&isImplicitlyConvertible!(ElementType!(R),T)):WrapperBase{
  this(R r){this.r = r;}
 private:
  R r;
 }
 WrapperBase[]buf;
}
void main(){
 auto hoge = new Hoge!(char)();
 hoge.chain("test");
 /**/
}
「conceptが合っていれば、どんな型でも保持できる」筈。
んでさー、ForwardRangeでないInputRangeってどうやって作ればいいの?