Consider following C++ code:
#include <vector>
struct A {
    template<int Count, typename InputIt, typename OutputIt>
    static OutputIt func(InputIt first, OutputIt result) {
        // write some stuff to result...
        return result;
    }
};
template<typename Self>
struct Utils {
    template<int Count, typename InputIt>
    static std::vector<int> func(InputIt first) {
        std::vector<int> vec;
        Self::func<Count>(first, std::back_inserter(vec));
        return vec;
    }
};
struct C : A, Utils<C> {};
auto example(const char* ptr) {
    return C::func<20>(ptr);
}
A implements some functionality func() and Utils a helper function that simplifies the use of func() having the same name but one parameter less(!). C just combines those two into one struct.
Now, inside example() I would like to call the func() defined in Utils. However, gcc fails with the error "reference to 'func' is ambiguous" (clang also fails with a similar error message). I expect the compiler to be able to pick the correct func() since they differ in their number of parameters. What am I doing wrong here? How can I fix this without having to rename one of the functions?
Thanks!