static void try_convert_real(
    char const* description, bool exp_pass,
    To (*fn)(From const&), From const& i)
{
    bool passed = false;
    try
    {
        To result = fn(i);
        passed = true;
        std::cout << description << ": " << i << " " << result;
    }
    catch (std::range_error& e)
    {
        std::cout << description << ": " << e.what();
        passed = false;
    }
    std::cout << ((passed == exp_pass) ? " PASSED" : " FAILED") << std::endl;
}
static void try_convert_real(
    char const* description, bool exp_pass,
    To (*fn)(From const&), From const& i)
{
    bool passed = false;
    try
    {
        To result = fn(i);
        passed = true;
        std::cout << description << ": " << i << " " << result;
    }
    catch (std::range_error& e)
    {
        std::cout << description << ": " << e.what();
        passed = false;
    }
    std::cout << ((passed == exp_pass) ? " PASSED" : " FAILED") << std::endl;
}