読者です 読者をやめる 読者になる 読者になる

C++11のstd::make_pair()

C++

C++11のstd::pairが参照をメンバとして持てるようになったこともあり、std::make_pair()関数にも若干の変更が入っています。std::make_pair()のテンプレートパラメータT1、T2がstd::reference_wrapper型だった場合は、展開されてT&となるようです。
VC10とGCC 4.7がこの仕様に対応してることは確認しました。

#include <iostream>
#include <utility>
#include <functional>
#include <type_traits>

int main()
{
    int a = 3;
    char b = 'a';

    auto p = std::make_pair(std::ref(a), std::ref(b));

    static_assert(std::is_same<decltype(p), std::pair<int&, char&>>::value, "");

    a = 4;

    std::cout << p.first << ',' << p.second << std::endl;
}
4,a