    #include <iostream>

    static const double US_TO_MXN = 12.99;
    static const char DATA_DATE[] = "6/12/2014";

    void convert(const char* from, const char* to, double exchange)
    {
        std::cout << "Enter the number of " << from << " to convert to " << to << ".\n"
                     "Amount: ";
        int original;
        std::cin >> original;
        std::cout << to << ": " << (original * exchange) << '\n';
    }

    int main()  // this is valid since C++2003
    {
        std::cout << "US/MXN Converter\n"
                     "1 US = " << US_TO_MXN << " MXN (" << DATA_DATE << ")\n"
                     "\n";

        int choice = 0;
        // Here's a better demonstration of goto
    GET_CHOICE:
        std::cout << "Which conversion do you want to perform?\n"
                    "[1] US to MXN\n"
                    "[2] MXN to US\n"
                    "Selection: ";
        std::cin >> choice;

        if (choice == 1)
            convert("US Dollars", "Pesos", US_TO_MXN);
        else if (choice == 2)
            convert("Pesos", "US Dollars", 1 / US_TO_MXN);
        else {
            std::cerr << "Invalid choice. Please try again.\n";
            goto GET_CHOICE;
        }

        // this also serves to demonstrate that goto is bad because
        // it's not obvious from the above that you have a loop.
    }
