Все отработало совершенно правильно. Вы пожелали выстрелить себе в ногу, компилятор Вам позволил осуществить свое желание, а вместо “спасибо” Вы начали его укорять за “ошибку”.
В теле функции Вы объявили переменную с именем, совпадающим с именем функции. Затем присвоили значение этой переменной и на этом тело функции завершили. Т.е. значение функции Вы не определили. По умолчанию объекты числового типа инициализируются нулем. Ноль Вы и получили. Так чем же вы недовольны?
Гуляют Винни с Пятачком по лесу, Винни жует пончик:
-Винни, Винни, дай мне кусочек пончика!
-Это не пончик, это-булочка.
-Винни, Винни, дай мне кусочек булочки!
-Это не булочка, это-коржик.
-Винни, Винни, дай мне кусочек коржика!
-Это не коржик, это-бублик.
-Винни, Винни, дай мне кусочек бублика!
-Отстань, противная свинья, ты сам не знаешь что хочешь!
Ну тут я не совсем согласен, компилятор выдаёт ошибки не дающие сделать глупость, он обязан помогать программисту. Но тут выдавать ошибку нет смысла потому что доступ к возвращаемому значению всё ещё есть, то есть ничего не сломано. А объявить свой Result компилятор как раз не даст.
Есть вариант с предупреждением, но это не достаточно полезно чтоб его добавляли)
Прежде всего, компилятор обязан не мешать программисту. В данном случае максимум того, что мог бы сделать компилятор - это дать предупреждающее сообщение, что результат, возвращаемый функцией, не определен в ее теле. Не более того.