SetLastError устанавливает простую глобальную переменную, она никак не влияет на поток программы.
throw остановит поток работающей программы, размотает стек до тех пор, пока он не будет где-то перехвачен предложением try-catch. Затем выполнение программы продолжится с конца улова.
Предлагаю прочитать эту статью, которая объясняет концепцию исключений. И читайте об исключениях C ++.
- Кроме того, не выбрасывайте 5, бросайте не встроенный объект, предпочтительно наследуемый std :: exception. Объект может содержать некоторое состояние, указывающее предложению catch, что делать с ошибкой.