Ярослав, а как в AO реализовано взаимодействие знаковых и беззнаковых типов? Как это соотносится с SHORT()? Насколько я понимаю, вычисления всегда со знаком, т.е. чтобы работать, допустим, с UNSIGNED32 диапазон вычислений со знаком должен быть уже 64-битным.

Или беззнаковые типы там "сырые" (им всё всегда можно присвоить, при этом знаковость игнорируется)?

Вот в GPCP тип UBYTE реализован очень строго: присваивать ему можно только через функцию USHORT(), проверяющую диапазон. Притом он реализован только в версии для .NET и, видимо, только для совместимости.