c++11 std::make_pair

场景:VS2012带的C++11库中std:make_pair的有关问题

VS2012带的C++11库中std::make_pair的问题
这是VS2012RTM版本中带的标准库中std::make_pair的实现,而且我只找到这一个实现,没有其它重载和特化版本。
C/C++ code

template<class _Ty1,
    class _Ty2> inline
    pair<typename _Unrefwrap<_Ty1>::type,
        typename _Unrefwrap<_Ty2>::type>
        make_pair(_Ty1&& _Val1, _Ty2&& _Val2)
    {    // return pair composed from arguments
    typedef pair<typename _Unrefwrap<_Ty1>::type,
        typename _Unrefwrap<_Ty2>::type> _Mypair;
    return (_Mypair(_STD forward<_Ty1>(_Val1),
        _STD forward<_Ty2>(_Val2)));
    }



两个参数都是非常量右值引用,非常量右值是不能绑定到左值的。如果在代码中使用下面的代码是编译不过的了。
C/C++ code

T1 t1;
T2 t2;
std::make_pain(t1, t2);


当你要往一个std::map中添加数据时,可能得换成下面这样的语法了。
C/C++ code
std::pair(t1, t2);


不知是否还有其他的解决方法,请各位指点。

------解决方案--------------------
模板里右值引用碰到左值会变成左值引用,以此来实现完美转发。

但是一般函数右值引用就不能传入左值。

make_pair会自动推导类型,不会自动推导用什么make_pair。。。直接声明得了

而且std::pair很诡异好像自带隐式类型转换,会根据类型能否转换自动匹配。


------解决方案--------------------
探讨

模板里右值引用碰到左值会变成左值引用,以此来实现完美转发。

但是一般函数右值引用就不能传入左值。

make_pair会自动推导类型,不会自动推导用什么make_pair。。。直接声明得了

而且std::pair很诡异好像自带隐式类型转换,会根据类型能否转换自动匹配。