Hello!

I am trying to compile the following program from Beyond the C++ Standard Library: An Introduction to Boost.

Here is the source code:

#include <iostream>
#include <string>
#include "boost/lexical_cast.hpp"

class lexical_castable
{
public:
    lexical_castable()
    {

    };

    lexical_castable(const std::string s) :
    s_(s)
    {

    };

    friend std::ostream& operator<<(std::ostream& o, const lexical_castable& le);
    friend std::istream& operator>>(std::istream& i, lexical_castable& le);

private:
    virtual void print_(std::ostream& o) const;
    void read_( std::istream& i );
    std::string s_;
};

std::ostream& operator<<(std::ostream& o, const lexical_castable& le)
{
    le.print _(o);

    return o;
}

std::istream& operator>>(std::istream& i, lexical_castable& le)
{
    le.read _(i);

    return i;
}

void lexical_castable::read_( std::istream& i )
{
    i >> s_;
}

void lexical_castable::print_( std::ostream& o ) const
{
    o << s_ <<"\n";
}

int main(int argc, char* argv[])
{
    lexical_castable le();
    std::cin >> le;

    int i=0;

    try
    {
        i = boost::lexical_cast<int>(le);
        std::cout << i << '\n';
       
    }
    catch(boost::bad_lexical_cast &e)
    {       
        std::cout << e.what() << '\n';

        std::cout << "You were supposed to enter a number!\n";
    }
}

The lexical_cast is throwing an exception as follows:

‡        boost::bad_lexical_cast::what returned    0x004c9888 "bad lexical cast: source type value could not be interpreted as target"    const char *

Note that I have modified the original code a bit because I was trying to figure out what went wrong. The object le is getting created successfully with the user entered "number" getting stored in the string s_

Please help. I am using  Visual studio 2005 with boost v1.34