C++11のstd::pairが参照をメンバとして持てるようになったこともあり、std::make_pair()関数にも若干の変更が入っています。std::make_pair()のテンプレートパラメータT1、T2がstd::reference_wrapper
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