Вообще вы написали лишь часть вопроса. А как ругается? Если ругается компилятор, то это никак не необработанное исключение, которые вылетает в рантайме. Напишите как ругается компилятор, какое у вас исключение.
1. Ошибка компилятора.
Возможно, компилятор ругается (особенно, если включен флаг
-Werror) на бессмысленность данного if потому что оно всегда ложно.
Я бы заменил код вывода в поток чем-то таким. Текста чуть больше, зато никаких if внутри цикла:
std::ostream& operator<<(std::ostream& os, const Vector& vec) {
os << "(";
if (vec.size) {
for (int i = 0; i < vec.size - 1; i++) {
os << vec.coord[i];
}
os << vec.coord[vec.size - 1]; // последний элемент
} else {
os << "Unfortunately I'm an empty vector";
}
os << ")";
return os;
}
2. На счет исключений:
Исключения нужно ловить и обрабатывать или не допускать (зависит от архитектуры). Необработанное исключение говорит о том, что ваша программа работает не отрабатывает корректно во всех возможных ситуациях, поскольку зачастую никто не хочет, чтобы программа завершалась ошибкой внезапно, в худшем случае вы должны хотя бы оповестить пользователя о том что произошло. Самый простой способ получить исключение - поделить на 0 число с фиксированной точностью.