Привет
Я не въеду как выводятся аргументы шаблонов
пример:
template
<
typename T,
template
<
typename V, typename Allocator = std::allocator<V>
>
class container
>
void print(container<T> const& c)
{
std::copy(std::begin(c), std::end(c), std::ostream_iterator<T>(std::cout, "\n"));
}
int main(int argc, char** argv)
{
std::vector<uint32_t> v = {1, 2, 3, 4, 5};
print(v);
return EXIT_SUCCESS;
}
как компилятор "догадывается", что T это uint32_t?
Что интересно, если сделать T вторым параметром шаблона
template
<
template
<
typename V, typename Allocator = std::allocator<V>
>
class container,
typename T
>
void print(container<T> const& c)
{
std::copy(std::begin(c), std::end(c), std::ostream_iterator<T>(std::cout, "\n"));
}
то все аргументы выводятся и программа компилируется
Странный вопрос, но если можно объясните плиз на пальцах почему оно компилируется?