c ++ szablon do parametru szablonu

ostatnio testowałem niektóre kody szablonów c ++ i znalazłem jeden zadziwiający błąd. Zgodnie z moimi badaniami internetowymi, w szczególności stackoverflow, ten kod jest całkowicie poprawny, ale kompilator podnosi błąd czasu kompilacji. Błąd znajduje się poniżej kodu.

Kod:

template<template<class> class C, typename T> void print(C<T>& c) {
}

int test() {
    vector<string> v(5, "Yow!");
    print(v);
    return 0;
}

Wyjście kompilatora:

In function ‘int test()’:
error: no matching function for call to ‘print2(std::vector<std::basic_string<char> >&)’
note: candidate is:
note: template<template<class> class C, class T> void print2(C<T>&)

Wydaje się, że coś jest nie tak z definicją lub moim kompilatorem, ale przetestowałem ten kod zarówno z g ++, jak i clang ++, aby mieć pewność, że nie ma żadnego problemu zależnego od kompilatora. Oba powodują ten sam błąd.

Naprawdę doceniam wszelkie znaczące komentarze, które mają na celu wyjaśnienie tego problemu.

Dziękuję Ci

questionAnswers(2)

yourAnswerToTheQuestion