>>693
実験してみた。そうらしい。
いまいちすっきり書けないのはbreakサポートの仕様の為。>>698は自分にそう言い聞かせた。

class IntList{
  int[] values;
  this(int[] values){ this.values = values; }
  /** 0でない要素だけを列挙する */
  int without0(int delegate(inout int) eachBody){
    int result = 0;
    foreach(value; this.values){
      if(value == 0){ continue; }
      result = eachBody(value);
      if(result){ break; }
    }
    return result;
  }
}
unittest{
  IntList sources = new IntList([1, 0, 2, 0]);
  int[] results;
  foreach(i; &sources.without0){
    results ~= i;
  }
  assert(results == [1, 2]);
}

無名デリゲートと組み合わせて呼ぶ方が自由度が高いかなー。foreachの仕様に合わせる必要がない分。
sources.without(2, (int i){ results ~= i; }); とかも書けるし。
sources.without(2) : (int i){ results ~= i; }; とか、無名デリゲートの部分を引数の外に追い出せたら最高なんだけど。