>>432 この理由なら
下記がいいという説明がつかない。
while (head + 1 < tail) { /* +1は、なくても動作する */
一応、ルーチンの先頭で型定義してるので、
連続して無くても問題ないのでは?

未定義なのは別の理由じゃないかな?