Приветствую участников форума.
В поиске был. Наверное плохо искал
Собственно, в чем неприятность заключается...
При использовании логических операторов "==", ">" и т.п. для переменных типа str сравнение происходит только по первым 32767 символам (это я так предполагаю

). При чем функция strcmp(...) отрабатывает правильно.
Из-за этой ошибки стандарнтое сравнение работает не верно для "больших" методов. Наткнулся давно, а посмотрел в чем дело только сейчас.
Вопрос: Присутствует ли такая багофича в последних версиях (тройки) или уже исправили? Или может это только у меня так?
Ax 3.0 SP2 (build 1951.2410).
Тестовый джоб:
X++:
static void tmp_BugStrCheck(Args _args)
{
#define.len(32767)
#define.suflen(1)
str s1;
str s2;
int i;
;
s1 = strrep("A", #len) + strrep("B", #suflen);
s2 = strrep("A", #len) + strrep("C", #suflen);
info(strfmt("The length of s1 (must be %1): %2", #len+#suflen, strlen(s1)));
info(strfmt("The length of s2 (must be %1): %2", #len+#suflen, strlen(s2)));
if (substr(s1, #len+1, 1) == substr(s2, #len+1, 1)) // false - ok
info(strfmt("Bug? Symbols at pos. %1 are eq.", #len+1));
else
info(strfmt("Check: Symbols at pos. %1 are not eq. Good...", #len+1));
if (strcmp(s1, s2) == 0) // false - ok
info("Function 'strcmp(...)': Bug? Strings s1 and s2 are eq. This is WRONG.");
else
info("Function 'strcmp(...)': Strings s1 and s2 are not eq. This is Ok.");
if (s1 == s2) // true - error
info("Operator '==': Bug? Strings s1 and s2 are eq. This is WRONG.");
else
info("Operator '==': Strings s1 and s2 are not eq. This is Ok.");
if (s1 < s2) // false - error
info("Operator '<': String s1 are less then s2. This is Ok.");
else
info("Operator '<': Bug? String s1 are not less then s2. This is WRONG.");
}
P.S. Кстати, 32767 = 2^16 / 2 - 1