Случилось нечто неожиданное - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь поиграть с неожиданными исключениями, но не могу заставить его работать.Это пример из: C ++ Reference

// set_unexpected example
#include <iostream>
#include <exception>
using namespace std;

void myunexpected () {
  cerr << "unexpected called\n";
  throw 0;     // throws int (in exception-specification)
}

void myfunction () throw (int) {
  throw 'x';   // throws char (not in exception-specification)
}

int main (void) {
  set_unexpected (myunexpected);
  try {
    myfunction();
  }
  catch (int) { cerr << "caught int\n"; }
  catch (...) { cerr << "caught other exception (non-compliant compiler?)\n"; }
  return 0;
} 

Они говорят, что выходные данные должны быть следующими:

Что не происходит, когда я пытаюсь это сделать.Мой вывод:
поймал другое исключение (несовместимый компилятор?)
Я использую VS2010 sp1

Ответы [ 3 ]

6 голосов
/ 10 февраля 2011

Документация из unexpected гласит: Стандарт C ++ требует, чтобы неожиданный вызов вызывался, когда функция генерирует исключение, которого нет в ее списке бросков.Текущая реализация не поддерживает это.
Таким образом, ответ заключается в том, что VC10 является несовместимым компилятором.

0 голосов
/ 10 февраля 2011

Visual C ++ всегда выдает Предупреждение C4290 , когда функция имеет спецификаторы исключений. Из той же статьи в MSDN: «Функция объявляется с использованием спецификации исключений, которую Visual C ++ принимает, но не реализует». Итак, этот компилятор не соответствует стандарту.

0 голосов
/ 10 февраля 2011

Visual Studio не реализует стандарт правильно. См. эту страницу MSDN . int анализируется, но не используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...