// No compila: el tipo que devuelve el template no se convierte en otro tipo sin relación.
#include <cassert>
#include <cstddef>
#include <vector>

template <typename T>
const T& max_of(const std::vector<T>& items) {
    assert(!items.empty());
    const T* best = &items[0];
    for (std::size_t i = 1; i < items.size(); i++) {
        if (items[i] > *best) {
            best = &items[i];
        }
    }
    return *best;
}

int main() {
    std::vector<double> prices{1.5, 0.25, 7.75};
    const int* top = &max_of(prices);
    return top == nullptr;
}
