         output[0] = ApplyOp<FlagOp>::FlagT(flag_op, preds[0], input[0], linear_tid * ITEMS_PER_THREAD);
 
         // Set output for remaining items
-        Iterate<1, ITEMS_PER_THREAD>::FlagHeads(linear_tid, output, input, preds, flag_op);
+        Iterate::FlagHeads(linear_tid, output, input, preds, flag_op);
     }
 
 #endif // DOXYGEN_SHOULD_SKIP_THIS

                  FlagOp flag_op)
        {
          #pragma unroll
          for (int i = ITERATION; i < MAX_ITERATIONS; ++i) {
              preds[i] = input[i - 1];
              flags[i] = ApplyOp<FlagOp>::FlagT(
                  flag_op,
                  preds[i],
                  input[i],
                  (linear_tid * ITEMS_PER_THREAD) + i);
          }
        }


    };

    /// Templated unrolling of item comparison (inductive case)
    struct Iterate
    {
        /**
