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.