    #include <string>
    #include <iostream>
    
    template <int attempts>
    struct password_entry
    {
    	static bool get_entry(std::string& myusername, std::string& mypassword)
    	{
    		std::cout << "Enter your username: ";
    		std::cin >> myusername;
    		std::cout << "Enter your password: ";
    		std::cin >> mypassword;
    		if (myusername == "veasy62" && mypassword == "12")
    		{
    			std::cout << "Access granted veasy62" << std::endl;
    			return true;
    		}
    		if ( attempts > 1 )
    			std::cout << "Access denied.  You have " << attempts - 1 << " attempts remaining\n";
    		return password_entry<attempts - 1>::get_entry(myusername, mypassword);
    	}
    };
    
    template <> 
    struct password_entry<0>
    {
    	static bool get_entry(const std::string& /*myusername*/, const std::string& /*mypassword*/)
    	{
    		std::cout << "Sorry you have ran out of attempts\n";
    		return false;
    	}
    };

    
    int main()
    {
    	std::string mypass, myuser;

        // max 2 attempts 
    	bool access_granted = password_entry<2>::get_entry(myuser, mypass);
    	if ( access_granted )
	       std::cout << "Welcome current user";
	    else
	       std::cout << "Please call 555-5555 to reset your password";
    }

