Сообщение Re[2]: Бага в VC++ с отрицательными i16 значениями от 20.08.2019 6:06
Изменено 26.08.2019 8:48 DDDX
Re[2]: Бага в VC++ с отрицательными i16 значениями
Здравствуйте, LaptevVV, Вы писали:
КД>>Сегодня закрыли (без исправлений) мой репорт с описанием баги в компиляторе VC++: неправильно обрабатывается отрицательное i16 значение.
КД>>Вкратце: -1i16 преобразуется в int, а не в short.
LVV>И становится положительным?
Нет. Но было бы неплохо, кстати
-1i16 преобразуется в (int)-1.
Нарваться можно, к примеру, в процессе формирования VARIANT-подобных классов.
Будет вызываться не тот оператор присваивания и, как следствие, назначаться VT_I4 вместо VT_I2.
КД>>Сегодня закрыли (без исправлений) мой репорт с описанием баги в компиляторе VC++: неправильно обрабатывается отрицательное i16 значение.
КД>>Вкратце: -1i16 преобразуется в int, а не в short.
LVV>И становится положительным?
Нет. Но было бы неплохо, кстати
-1i16 преобразуется в (int)-1.
#include <iostream>
void TEST_FUNC(int) { std::cout<<"TEST_FUNC(int)"<<std::endl; }
void TEST_FUNC(short) { std::cout<<"TEST_FUNC(short)"<<std::endl; }
int main()
{
TEST_FUNC(-1i16); // <----- call of TEST_FUNC(int) !!!
TEST_FUNC((short)-1i16);
TEST_FUNC(1i16);
auto v=-1i16;
std::cout<<"TYPE:"<<typeid(v).name()<<std::endl;
std::cout<<"TYPE:"<<typeid(-1i16).name()<<std::endl;
return 0;
}
--------------------------------------------------------------
Actual Output:
TEST_FUNC(int)
TEST_FUNC(short)
TEST_FUNC(short)
TYPE:int
TYPE:int
Expected Output:
TEST_FUNC(short)
TEST_FUNC(short)
TEST_FUNC(short)
TYPE:short
TYPE:short
Нарваться можно, к примеру, в процессе формирования VARIANT-подобных классов.
Будет вызываться не тот оператор присваивания и, как следствие, назначаться VT_I4 вместо VT_I2.
Re[2]: Бага в VC++ с отрицательными i16 значениями
Здравствуйте, LaptevVV, Вы писали:
КД>>Сегодня закрыли (без исправлений) мой репорт с описанием баги в компиляторе VC++: неправильно обрабатывается отрицательное i16 значение.
КД>>Вкратце: -1i16 преобразуется в int, а не в short.
LVV>И становится положительным?
Нет. Но было бы неплохо, кстати
-1i16 преобразуется в (int)-1.
Нарваться можно, к примеру, в процессе формирования VARIANT-подобных объектов.
Будет вызываться не тот оператор присваивания и, как следствие, назначаться VT_I4 вместо VT_I2.
КД>>Сегодня закрыли (без исправлений) мой репорт с описанием баги в компиляторе VC++: неправильно обрабатывается отрицательное i16 значение.
КД>>Вкратце: -1i16 преобразуется в int, а не в short.
LVV>И становится положительным?
Нет. Но было бы неплохо, кстати
-1i16 преобразуется в (int)-1.
#include <iostream>
void TEST_FUNC(int) { std::cout<<"TEST_FUNC(int)"<<std::endl; }
void TEST_FUNC(short) { std::cout<<"TEST_FUNC(short)"<<std::endl; }
int main()
{
TEST_FUNC(-1i16); // <----- call of TEST_FUNC(int) !!!
TEST_FUNC((short)-1i16);
TEST_FUNC(1i16);
auto v=-1i16;
std::cout<<"TYPE:"<<typeid(v).name()<<std::endl;
std::cout<<"TYPE:"<<typeid(-1i16).name()<<std::endl;
return 0;
}
--------------------------------------------------------------
Actual Output:
TEST_FUNC(int)
TEST_FUNC(short)
TEST_FUNC(short)
TYPE:int
TYPE:int
Expected Output:
TEST_FUNC(short)
TEST_FUNC(short)
TEST_FUNC(short)
TYPE:short
TYPE:short
Нарваться можно, к примеру, в процессе формирования VARIANT-подобных объектов.
Будет вызываться не тот оператор присваивания и, как следствие, назначаться VT_I4 вместо VT_I2.