Function templates let one function body work with more than one type.

Function Templates

function_templates.cpp
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
#include <iostream>

template <typename T>
T larger(T left, T right) {
    if (left > right) {
        return left;
    }
    return right;
}

int main() {
    int first = ;
    int second = ;

    int best = larger(first, second);

    std::cout << "first=" << first << std::endl;
    std::cout << "second=" << second << std::endl;
    std::cout << "larger=" << best << std::endl;
    return 0;
}
function template A function template uses a type parameter such as `T` so the compiler can build a typed version when the function is called.