Цикл while (true) ...
никогда не останавливается. break
никогда не выполняется, потому что cin >> pt
продолжает сбой. Вы не можете исправить это с помощью простых операций istream, поскольку cin >> pt никогда не преуспеет, если вы ввели неверный ввод. Либо ожидайте правильного ввода, и сразу же провалите, если это не так:
while (points.size() < 3 && (cin >> pt))
{
points.push_back(pt);
}
if (points.size() < 3) throw "up";
или считайте ввод как строку и проанализируйте его как отдельную операцию.
Пока мы это делаем, упростите ваш экстрактор:
istream& operator>>(istream& is, Point& pt)
{
Point p;
if (is >> p.x >> p.y) pt = p;
return is;
}