* Write a program to define the function template for swapping two items of the various data types such as integer ,float,and characters. #+ATTR_LATEX: :options frame=single,breaklines=true #+begin_src cpp :tangle 22.cpp :results output :exports both :wrap src text #include template ::value, T> = 0> void swap(T &x, T &y) { x += y; y = x - y; x -= y; } int main() { char x = '['; char y = 'w'; swap(x, y); std::cout << "x = " << x << ", y = " << y; return 0; } #+end_src #+LATEX: \clearpage * Write a program to define the function template for calculating the square of given numbers with different data types. #+ATTR_LATEX: :options frame=single,breaklines=true #+begin_src cpp :tangle 23.cpp :results output :exports both :wrap src text #include template std::enable_if_t::value, T> sq(T x) { return x * x; } int main() { float x = 4.4; std::cout << "double: " << sq((double)5.3) << "\nlong: " << sq(4l); return 0; } #+end_src #+LATEX: \clearpage * Write a program to illustrate how template functions can be overloaded. #+ATTR_LATEX: :options frame=single,breaklines=true #+begin_src cpp :tangle 24.cpp :results output :exports both :wrap src text #include template std::enable_if_t::value, T> fn(T x) { return x * x; } template std::enable_if_t::value, T> fn(T x) { return --x; } int main() { float x = 4.4; std::cout << "floating: " << fn((double)5.3) << "\nintegral: " << fn(4l); return 0; } #+end_src