1.
It will check if there is enough space to hold new objects. The max space would be equal to max value of unsigned int, which is determined by (_SIZT)-1. The space needed is then determined by sizeof(_Ty) * _Count. It should be written as
else if (((_SIZT)(-1) / _Count) < sizeof (_Ty))
Throw bad allocation exception if the needed space exceeds the maximum space, by
_THROW_NCEE(std::bad_alloc, NULL);
Otherwise, call operator new to allocate raw memory space.
2.
From my point of view, it's ok for placement new to use non-void pointer, if nobody overloads placement new.
The cast ensures that the void pointer version of placement new (or the standard placement new) is called.
You could also google "operator new", "new expression", "placement new", and "allocator class" for better understanding.