{"id":2060,"date":"2025-01-27T19:48:51","date_gmt":"2025-01-27T19:48:51","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/?page_id=2060"},"modified":"2025-01-27T21:19:05","modified_gmt":"2025-01-27T21:19:05","slug":"function-template-overloading","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/topics\/c-details\/function-templates-2\/function-template-overloading\/","title":{"rendered":"Function Template Overloading"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Function_Template_Overloading\"><\/span>Function Template Overloading<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>We can declare several function templates with the same name and even declare a combination of function templates and ordinary functions with the same name.<\/p>\n\n\n\n<p>The compiler needs to perform overload resolution to determine the correct function or template function to invoke.<\/p>\n\n\n\n<p>Overloading resolution is done as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Find the set of function template specializations that will take part in overload resolution, by considering each function template and deciding which template arguments, if any, would be used if no other function templates or functions of the same name were in scope.<\/li>\n\n\n\n<li>If two template functions can be called and one is more specialized than the other, consider only the most specialized template function<\/li>\n\n\n\n<li>Do overload resolution for this set of functions, plus any ordinary functions, as for ordinary functions.&nbsp; If a template function argument has been determined by template argument declaration, that argument cannot have promotions, standard conversions, or user-defined conversions applied.<\/li>\n\n\n\n<li>If a function and a specialization are equally good matches, the function is preferred.<\/li>\n\n\n\n<li>If no match is found, the call is <em>in error<\/em>.&nbsp;<br>If there are two or more equally good matches, the call is <em>ambiguous<\/em>.<\/li>\n<\/ol>\n\n\n\n<p>For example:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Function Overload Resolution\n\/\/\n\/\/  Created by Bryan Higgs on 10\/13\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\ntemplate &lt;typename T&gt;\nT max(T first, T second)\n{\n  std::cout &lt;&lt; &quot;first  : &quot; &lt;&lt; typeid(first).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; first &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;second : &quot; &lt;&lt; typeid(second).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; second &lt;&lt; std::endl;\n\n  T maxValue = first &gt; second ? first : second;\n  std::cout &lt;&lt; &quot;Max: &quot; &lt;&lt; maxValue &lt;&lt; std::endl;\n  return maxValue;\n}\n\nint main(int argc, const char * argv[]) \n{\n  const int s = 7;\n  max(1, 2);     \/\/ max&lt;int&gt;(1, 2)\n  max('a', 'b'); \/\/ max&lt;char&gt;('a', 'b')\n  max(2.7, 4.9); \/\/ max&lt;double&gt;(2.7, 4.9)\n  max(s, 7);     \/\/ max&lt;int&gt;(int(s), 7)\n\n  max('a', 1);  \/\/ error: ambiguous\n  max(2.7, 4);  \/\/ error: ambiguous\n  \n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Overload Resolution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/13\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">template<\/span><span style=\"color: #000000\"> &lt;<\/span><span style=\"color: #0000FF\">typename<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">first<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">second<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;first  : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(first).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; first &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;second : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(second).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; second &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  T maxValue = first &gt; second ? first : second;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Max: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; maxValue &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> maxValue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> s = <\/span><span style=\"color: #098658\">7<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">     \/\/ max&lt;int&gt;(1, 2)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&#39;a&#39;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #A31515\">&#39;b&#39;<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\"> \/\/ max&lt;char&gt;(&#39;a&#39;, &#39;b&#39;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.7<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">4.9<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\"> \/\/ max&lt;double&gt;(2.7, 4.9)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(s, <\/span><span style=\"color: #098658\">7<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">     \/\/ max&lt;int&gt;(int(s), 7)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&#39;a&#39;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ error: ambiguous<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.7<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ error: ambiguous<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>which produces the following compile-time errors:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>main.cpp:31:3 No matching function for call to 'max'\n\nCandidate template ignored: deduced conflicting types for parameter 'T' ('char' vs. 'int')<\/strong>\n<strong>\n<\/strong>\n<strong>main.cpp:32:3 No matching function for call to 'max'\n\nCandidate template ignored: deduced conflicting types for parameter 'T' ('double' vs. 'int')<\/strong><\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>When I remove the offending statements:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Function Overload Resolution\n\/\/\n\/\/  Created by Bryan Higgs on 10\/13\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\ntemplate &lt;typename T&gt;\nT max(T first, T second)\n{\n  std::cout &lt;&lt; &quot;first  : &quot; &lt;&lt; typeid(first).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; first &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;second : &quot; &lt;&lt; typeid(second).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; second &lt;&lt; std::endl;\n\n  T maxValue = first &gt; second ? first : second;\n  std::cout &lt;&lt; &quot;Max: &quot; &lt;&lt; maxValue &lt;&lt; std::endl;\n  return maxValue;\n}\n\nint main(int argc, const char * argv[]) \n{\n  const int s = 7;\n  max(1, 2);     \/\/ max&lt;int&gt;(1, 2)\n  max('a', 'b'); \/\/ max&lt;char&gt;('a', 'b')\n  max(2.7, 4.9); \/\/ max&lt;double&gt;(2.7, 4.9)\n  max(s, 7);     \/\/ max&lt;int&gt;(int(s), 7)\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Overload Resolution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/13\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">template<\/span><span style=\"color: #000000\"> &lt;<\/span><span style=\"color: #0000FF\">typename<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">first<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">second<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;first  : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(first).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; first &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;second : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(second).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; second &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  T maxValue = first &gt; second ? first : second;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Max: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; maxValue &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> maxValue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> s = <\/span><span style=\"color: #098658\">7<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">     \/\/ max&lt;int&gt;(1, 2)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&#39;a&#39;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #A31515\">&#39;b&#39;<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\"> \/\/ max&lt;char&gt;(&#39;a&#39;, &#39;b&#39;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.7<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">4.9<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\"> \/\/ max&lt;double&gt;(2.7, 4.9)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(s, <\/span><span style=\"color: #098658\">7<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">     \/\/ max&lt;int&gt;(int(s), 7)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>the program produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>first  : i value: 1\nsecond : i value: 2\nMax: 2\nfirst  : c value: a\nsecond : c value: b\nMax: b\nfirst  : d value: 2.7\nsecond : d value: 4.9\nMax: 4.9\nfirst  : i value: 7\nsecond : i value: 7\nMax: 7\nProgram ended with exit code: 0<\/strong><\/code><\/pre>\n\n\n\n<p>(See above for mangled type meanings.)<\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Function_Template_Overload_Resolution\"><\/span>Function Template Overload Resolution<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The ambiguities can be resolved in two ways:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>By using explicit qualification, or:<\/li>\n\n\n\n<li>By adding suitable declarations<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Using_explicit_qualification\"><\/span>Using explicit qualification:<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Resolution1.cpp\n\/\/  Function Overload Resolution\n\/\/\n\/\/  Created by Bryan Higgs on 10\/13\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\ntemplate &lt;typename T&gt;\nT max(T first, T second)\n{\n  std::cout &lt;&lt; &quot;first  : &quot; &lt;&lt; typeid(first).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; first &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;second : &quot; &lt;&lt; typeid(second).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; second &lt;&lt; std::endl;\n\n  T maxValue = first &gt; second ? first : second;\n  std::cout &lt;&lt; &quot;Max: &quot; &lt;&lt; maxValue &lt;&lt; std::endl;\n  return maxValue;\n}\n\nint main(int argc, const char * argv[])\n{\n  \/\/max('a', 1);  \/\/ error: ambiguous\n  max&lt;int&gt;('a', 1);    \/\/ max&lt;int&gt;(int('a'), 1)\n  \/\/max(2.7, 4);  \/\/ error: ambiguous\n  max&lt;double&gt;(2.7, 4);  \/\/ max&lt;double&gt;(2.7, double(4))\n  \n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Resolution1.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Overload Resolution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/13\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">template<\/span><span style=\"color: #000000\"> &lt;<\/span><span style=\"color: #0000FF\">typename<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">first<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">second<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;first  : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(first).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; first &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;second : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(second).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; second &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  T maxValue = first &gt; second ? first : second;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Max: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; maxValue &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> maxValue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/max(&#39;a&#39;, 1);  \/\/ error: ambiguous<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">&gt;(<\/span><span style=\"color: #A31515\">&#39;a&#39;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">    \/\/ max&lt;int&gt;(int(&#39;a&#39;), 1)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/max(2.7, 4);  \/\/ error: ambiguous<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">&gt;(<\/span><span style=\"color: #098658\">2.7<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ max&lt;double&gt;(2.7, double(4))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>This program produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>first  : i value: 97\nsecond : i value: 1\nMax: 97\nfirst  : d value: 2.7\nsecond : d value: 4\nMax: 4\nProgram ended with exit code: 0<\/strong><\/code><\/pre>\n\n\n\n<p>(See above for mangled type meanings.)<\/p>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adding_suitable_declarations\"><\/span>Adding suitable declarations:<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Resolution2.cpp\n\/\/  Function Overload Resolution\n\/\/\n\/\/  Created by Bryan Higgs on 10\/13\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\ntemplate &lt;typename T&gt;\nT max(T first, T second)\n{\n  std::cout &lt;&lt; &quot;first  : &quot; &lt;&lt; typeid(first).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; first &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;second : &quot; &lt;&lt; typeid(second).name() &lt;&lt; &quot; &quot;\n            &lt;&lt; &quot;value: &quot; &lt;&lt; second &lt;&lt; std::endl;\n\n  T maxValue = first &gt; second ? first : second;\n  std::cout &lt;&lt; &quot;Max: &quot; &lt;&lt; maxValue &lt;&lt; std::endl;\n  return maxValue;\n}\ninline int max(char c, int i)\n{ return max&lt;int&gt;(c, i); }\ninline int max(int i, char c)\n{ return max&lt;int&gt;(i, c); }\ninline int max(int i, int j)\n{ return max&lt;int&gt;(i,j); }\ninline double max(int i, double d)\n{ return max&lt;double&gt;(i, d); }\ninline double max(double d, int i)\n{ return max&lt;double&gt;(d, i); }\ninline double max(double d1, double d2)\n{ return max&lt;double&gt;(d1, d2); }\n\nint main(int argc, const char * argv[])\n{\n  max('a', 1);  \/\/ max&lt;int&gt;(int('a'), 1)\n  max(2.7, 4);  \/\/ max&lt;double&gt;(2.7, double(4))\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Resolution2.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Overload Resolution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/13\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">template<\/span><span style=\"color: #000000\"> &lt;<\/span><span style=\"color: #0000FF\">typename<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">first<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">second<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;first  : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(first).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; first &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;second : &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">typeid<\/span><span style=\"color: #000000\">(second).<\/span><span style=\"color: #795E26\">name<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;value: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; second &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  T maxValue = first &gt; second ? first : second;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Max: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; maxValue &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> maxValue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">inline<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">c<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{ <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">&gt;(c, i); }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">inline<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">c<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{ <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">&gt;(i, c); }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">inline<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">j<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{ <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">&gt;(i,j); }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">inline<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">d<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{ <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">&gt;(i, d); }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">inline<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">d<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{ <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">&gt;(d, i); }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">inline<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">d1<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">d2<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{ <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">&gt;(d1, d2); }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&#39;a&#39;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ max&lt;int&gt;(int(&#39;a&#39;), 1)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">max<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.7<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ max&lt;double&gt;(2.7, double(4))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>This program also produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>first  : i value: 97\nsecond : i value: 1\nMax: 97\nfirst  : d value: 2.7\nsecond : d value: 4\nMax: 4\nProgram ended with exit code: 0<\/strong><\/code><\/pre>\n\n\n\n<p>(See earlier for mangled type meanings.)<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>But it kinda defeats the purpose of using templates, right?<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:47px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-font-size has-medium-font-size\"><a class=\"wp-block-button__link has-palette-color-8-color has-text-color has-link-color wp-element-button\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/topics\/c-details\/function-templates-2\/using-arguments-to-specify-policy\/\">Next: Using Arguments to Specify Policy<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Function Template Overloading We can declare several function templates with the same name and even declare a combination of function templates and ordinary functions with the same name. The compiler needs to perform overload resolution to determine the correct function or template function to invoke. Overloading resolution is done as follows: For example: which produces [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2029,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2060","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/2060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/comments?post=2060"}],"version-history":[{"count":3,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/2060\/revisions"}],"predecessor-version":[{"id":2095,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/2060\/revisions\/2095"}],"up":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/2029"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/media?parent=2060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}