На сколько я себе это представляю, расширенный тип закреплен именно за переменной, а не за её значением.
X++:
Qty source1;
InventQty source2;
Qty target;
;
source1 = 100;
source2 = 200;
target = source1 + source2;
// Какого типа должно стать значение target?
// А если типы source1 и source2 принадлежат не одной иерархии?
Объекты другое дело - здесь есть понятие не только типа переменной но и типа значения. Последнее можно определить при помощи функции ClassIdGet().