спецификатор throw always. нужен ли он ?
От: Feonyf  
Дата: 03.09.09 04:28
Оценка:
есть код с ворнингом от компилятора VS2008


void AppendContext(const char* Context)
{
  MyException e(GetException());
  e.AppendContext(Context);
  throw e;
}

bool MyMain()
{
  try {
    SomethingFunction();
    return true; // в данном примере возвращаемое значение пустышка. Но в реальных приложениях такое возможно
  }
  catch(...) {
    AppendContext("MyMain context."); // компилятор выдает ворнинг throwalwaystest.cpp(63) : warning C4715: 'MyMain' : not all control paths return a value
  }
}


компилятор ведь неправ, правда ?

полный пример http://files.rsdn.ru/46977/ThrowAlwaysTest.7z

Поэтому я вижу несколько путей решения:
1. самый лучший — компилятор должен исправиться
2. похуже т.к. в п.1 наверно трудно сделать такой компилятор то нужно ввести в язык спецификатор throwalways: "void AppendContext() throwalways". На базе этого спецификатора компилятор не будет выдавать ворнингов
3. еще хуже: pragma warning(disable:4715)

Что скажете ?
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.