Ragazzi non ho idea di cosa stia succedendo...

In pratica io ho una funzione che lavora su una matrice quadrata. Se la riga o la colonna sono più grandi della dimensione della matrice deve sollevare un'eccezione. Così:

codice:
square_matrix square_matrix::suppress(unsigned int row, unsigned int column) const
	throw (out_of_bounds_exception)
{
	cout << "Debug couts:" << endl;
	cout << "In square_matrix::suppress(unsigned, unsigned)." << endl;
	cout << "_dim = " << _dim << endl;
	cout << "row = " << row << endl;
	cout << "column = " << column << endl;
	
	if ( (row >= _dim) || (column >= _dim) )
		throw out_of_bounds_exception();

        ...
}
Quando la chiamo dal main, così:

codice:
try
{
	square_matrix B = A.suppress(0,0);
	B.print();
}
catch(out_of_bounds_exception& ex)
{
	cerr << "out_of_bounds_exception raised." << endl;
}
Ottengo questo output meraviglioso:

codice:
Debug couts:
In square_matrix::suppress(unsigned, unsigned).
_dim = 3
row = 0
column = 0
out_of_bounds_exception raised.
Cioè, ora, io ero convinto che (0 < 3)... no? I numeri in gioco sono tutti unsigned.
Qualcuno ha idea di cosa stia succedendo?