template argument deduction
От: Logot Украина  
Дата: 10.01.16 19:49
Оценка:
Привет
Я не въеду как выводятся аргументы шаблонов
пример:

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"));
}

то все аргументы выводятся и программа компилируется
Странный вопрос, но если можно объясните плиз на пальцах почему оно компилируется?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.