I am not doing those checks. In my defense, neither does the existing code despite the fact that it states:

        <code>sizeof(std::iterator_traits<I>::value_type)</code> must be 1

and it relies on this fact in several places. That simply means that I should correct this for the original code as well. I will add the appropriate static asserts.