(Operator Overloading in Templates) Write a simple function template for predicate function is Equal To that compares its two arguments of the same type with the equality operator (==) and returns true if they are equal and false otherwise. Use this function template in a program that calls is Equal To only with a variety of fundamental types. Now write a separate version of the program that calls is Equal To with a user-defined class type but does not overload the equality operator. What happens when you attempt to run this program? Now overload the equality operator (with the operator function) operator==. Now what happens when you attempt to run this program?