Редактировать : Помимо ответа @ thiton.
При простом назначении это невозможно. Однако, если вы присваиваете значение немного особым образом обернутым образом , то это может помочь. т.е.
nVal = -5;
следует заменить на
Assign<-5>(nVal);
Где, Assign()
выглядит,
template<int VAL>
void Assign (unsigned int &nVal)
{
typedef int arr[(VAL >= 0) 1 : -1];
nVal = VAL;
}
Демо .