struct A { private: std::string s; public: A( int value ) : s( boost::lexical_cast<std::string>( value ) ) {} };
Что будет с данным кодом, если boost::lexical_cast вдруг выкинет исключение? А будет то, что экземпляр класса A не создастся. Это может быть совсем не то, что мы хотим. Как раз для таких целей и нужен function-try-block. Выглядить это будет так:
struct A { private: std::string s; public: A( int value ) try : s( boost::lexical_cast<std::string>( value ) ) {} catch ( boost::bad_lexical_cast ) { /* handle lexical_cast exception here */ } };
Обратите внимание в каком месте находится ключевое слово try.