void try_get(zmqpp::socket const& socket, zmqpp::socket_option const& option, std::string const& option_name, std::string const& value_type)
{
    BOOST_CHECKPOINT("getting option " << option_name << " against set type '" << value_type << "'");
    try
    {
        CheckType value;
        socket.get(option, value);
        BOOST_CHECK_MESSAGE(typeid(CheckType) == typeid(WantedType), "expected exception getting option " << option_name << " against type '" << value_type << "'");
    }
    catch(zmqpp::zmq_internal_exception const& e)
    {
        BOOST_CHECK_MESSAGE(false, "threw internal exception " << e.zmq_error() << " '" << e.what() << "' getting option " << option_name << " against type '" << value_type << "'");
    }
    catch(zmqpp::exception const& e)
    {
        BOOST_CHECK_MESSAGE(typeid(CheckType) != typeid(WantedType), "threw unexpected exception '" << e.what() << "' getting option " << option_name << " against type '" << value_type << "'");
    }
}