Search code examples
c++stlstd-pair

What is the purpose of std::make_pair vs the constructor of std::pair?


What is the purpose of std::make_pair?

Why not just do std::pair<int, char>(0, 'a')?

Is there any difference between the two methods?


Solution

  • (This answer is only correct for C++14 and earlier standards, due to CTAD)

    The difference is that with std::pair you need to specify the types of both elements, whereas std::make_pair will create a pair with the type of the elements that are passed to it, without you needing to tell it. That's what I could gather from various docs anyways.

    See this example from http://www.cplusplus.com/reference/std/utility/make_pair/

    pair <int,int> one;
    pair <int,int> two;
    
    one = make_pair (10,20);
    two = make_pair (10.5,'A'); // ok: implicit conversion from pair<double,char>
    

    Aside from the implicit conversion bonus of it, if you didn't use make_pair you'd have to do

    one = pair<int,int>(10,20)
    

    every time you assigned to one, which would be annoying over time...