ラップアラウンドの処理はめんどう

32ビット値でインデックスとオフセットを受け取って、対象のアドレスになんかの操作をするような関数があったとする。
とりあえず、インデックスは最大100までとすると、範囲が超えてないかチェックする必要がでてくるわけで。

bool test(unsigned int index, unsigned int offset)
{
	//範囲チェック
	if(100 < index + offset)
	{
		//エラー
		return false;
	}
	//何かの処理
	return true;
}

これだと、index + offsetが32ビット値を超えるときに範囲内に戻っちゃうのでエラーにならない。
じゃぁ、一回64ビット値に入れればいいじゃないかと。

bool test(unsigned int index, unsigned int offset)
{
	//範囲チェック
	long long targetIndex = index + offset;
	if(100 < targetIndex)
	{
		//エラー
		return false;
	}
	//何かの処理
	return true;
}

これ、ダメなんですよね。
せっかく64ビット変数を用意したのに、そこに入るのは32ビットの計算結果。
なのですでにラップアラウンドした後。

bool test(unsigned int index, unsigned int offset)
{
	//範囲チェック
	long long targetIndex = index;
	targetIndex += offset;
	if(100 < targetIndex)
	{
		//エラー
		return false;
	}
	//何かの処理
	return true;
}

いったん64ビット値にしたあと、加算すればOK・・・だけどなんか汚いなぁ・・・。