Vector2i(mSize.x() - mTabControlWidth, 0)
разрушается на следующем ;
, в то время как rightDistance
все еще ссылается на него.Это неопределенное поведение, то есть, если повезет, оно работает так, как вы ожидаете, но оно может делать все, что хочет компилятор (скорее всего, вылетит или вернет произвольные результаты).
Как сказал Avi, просто избегайте auto
.В вашем случае вы также должны использовать Array2i
вместо Vector2i
.Это избавляет вас от написания всех .array()
.Кроме того, если выражение auto
сработало, rightDistance
будет оцениваться дважды, а не один раз (ооо, компилятор обычно хорошо это оптимизирует).
int main()
{
Array2i p(302,12);
int mTabControlWidth = 20;
Array2i mPos(0,0);
Array2i mSize(310,24);
Array2i rightDistance = (p - (mPos + Array2i(mSize.x() - mTabControlWidth, 0)));
bool hitRight = (rightDistance >= 0).all() && (rightDistance < Array2i(mTabControlWidth, mSize.y())).all();
if (hitRight)
printf("Hit Right\n");
printf("Hit none\n");
return 0;
}