#include <iostream>
#include <vector>

template <typename T> class Bar {};

template <typename C> struct get_template_type;

template <template <typename > class C, typename T>
struct get_template_type<C<T>>
{
    using type = T;
};

template <typename T>
void someFunction()
{
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

template <typename C>
void test(const C& c)
{
    for (auto& foo : c) {
        someFunction<typename get_template_type<typename std::decay<decltype(foo)>::type>::type>();
    }
}

int main() {
    std::vector<Bar<int>> fs(1);

    test(fs);
}
