関数テンプレートのパラメータの型推定手順について質問があります。
次の例を見てください。
#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;
}
私が物事を正しく理解していれば、2 番目のパラメーターはstd::istream_iterator
、デフォルトのコンストラクターが呼び出される型であると推定されます。
適切なstd::vector
コンストラクターは次のように宣言されます。
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
std::istream_iterator<int>
2 番目のパラメータも同様に推定されるので、最初のパラメータの型が推定されるstd::istream_iterator<int>
ため、統一された初期化セマンティクスを適用できます。私が知らないのは、型推論がどの順序で行われるかです。これに関する情報をいただければ幸いです。
前もって感謝します!