Como usar o boost :: error_info corretamente?

Estou tentando seguir os exemplos desta página:

http://www.boost.org/doc/libs/1_40_0/libs/exception/doc/motivation.html

No minuto em que tento a seguinte linha:

throw file_read_error() << errno_code(errno);

Eu recebo um erro:

error C2440: '<function-style-cast>' : cannot convert from 'int' to 'errno_code'

Como faço para que isso funcione?

Idealmente, quero criar algo parecido com isto:

typedef boost::error_info<struct tag_HRESULTErrorInfo, HRESULT> HRESULTErrorInfo;

Mas não consigo nem dar os primeiros exemplos para o trabalho.

Edit: Aqui está um breve exemplo do que gera o erro C2440 para mim:

struct exception_base: virtual std::exception, virtual boost::exception { };
struct io_error: virtual exception_base { };
struct file_read_error: virtual io_error { };

typedef boost::error_info<struct tag_errno_code,int> errno_code;

void foo()
{
    // error C2440: '<function-style-cast>' : cannot convert from 'int' to 'errno_code'
    throw file_read_error() << errno_code(errno);
}

questionAnswers(3)

yourAnswerToTheQuestion