У меня есть небольшая проблема, которую я не могу решить чистым способом. Я немного экспериментирую с обработкой полиморфных исключений, поэтому добавил виртуальную функцию рейза в свой класс исключений, которые выполняют фактическое бросание, и я заменил бросок вызовом raise(). Все работает, как ожидалось, но затем я применил это решение функции с типом возвращаемого со следующей общей форме:Полиморфная обработка исключений и предупреждения компилятора
Obj Foo()
{
if(true)
return Obj
else
{
//throw Exception; //With this call everything is fine
Exception e{};
e.raise(); //The compiler warns me that I do not return anything
}
}
Когда я компилирую такую функцию в GCC компилятора (v4.9) жалуется, что Foo достигает конец (без возврата) (-Дервый тип) Есть ли способ убедить компилятор, что все в порядке, не скрывая предупреждения?
_I есть ли способ убедить компилятор, что все в порядке, не скрывая предупреждения? _ Разве эти непересекающиеся? – erip
Полиморфные исключения? Зачем? происходят из 'std :: runtime_error' или' std :: logic_error'. Затем выведите исключение, которое вы хотите бросить, - один тип исключения для типа проблемы. –
@erip: они не являются непересекающимися, потому что все на самом деле нормально. Если я беру инструкцию throw из функции повышения в тело, компилятор распознает, что все пути выполнения возвращаются должным образом. Если он скрыт в функции raise(), компилятор жалуется на – Triskeldeian