Hi Nathan, sorry for the late reply.
1. What version of boost are you using? There have some changes in the current trunk and release branch which should appear in boost 1.45.
I've reproduced the issues with both boost 1.44 and the current trunk using VC8 (VS2005). Interestingly, the issues don't appear with VC10 nor with g++.
I have tried with VC10, VC9, and VC8. I could only reproduce the problem with VC8 but only when turning on warning level W4. I have done some testing to figure out if the code produced by the various compilers differ. But as far as I can see they produce the same code. What I did was to insert some local variables to check for their data type based on the template parameters. I don't really understand why the newer compilers don't emit warnings. Do you have some ideas?
NOTE: The patch I sent earlier has an error -- in copying my changes from 1.44 to the trunk I failed to replace value_type with type in a couple places. The patch attached to this email corrects that.
I'll apply your patch to the boost trunk and will update the release branch once the boost 1.45 is out. I like the convenience of base_channel_type and I think it makes the code more readable. One change I did do is to remove the typedef for integer_t and the cast to integer_t in channel_converter_unsigned_integral_nondivisible<..>. I don't think that's needed anymore. Thanks Nathan for putting this through. Regards, Christian