У меня есть вопрос относительно процедуры вывода типа параметра шаблона функции.
Возьмите этот пример:
#include <vector>
#include <sstream>
#include <string>
#include <iterator>
#include <fstream>
int main()
{
std::ifstream file("path/to/file");
std::vector<int> vec(std::istream_iterator<int>{file},{}); // <- This part
return 0;
}
Если я правильно понимаю, второй параметр выводится как тип std::istream_iterator
, из которого вызывается конструктор по умолчанию.
Соответствующий конструктор std::vector
объявляется как:
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
Поскольку первый тип параметра выводится как std::istream_iterator<int>
, второй параметр также выводится как std::istream_iterator<int>
, поэтому может применяться единая семантика инициализации. Чего я не знаю, так это того, в каком порядке происходит вывод типа. Я был бы очень признателен за некоторую информацию об этом.
Заранее спасибо!