VS2012 error C2664: “std::make_pair”:無法將左值綁定到右值引用
在vs2012(c++11)make_pair()改動:
C++11: template <class T1, class T2> pair<V1, V2> make_pair(T1&& x, T2&& y);如果沒有指定類型,它會自動推導.
C++11: template <class T1, class T2> pair<V1, V2> make_pair(T1&& x, T2&& y);如果沒有指定類型,它會自動推導.
C++03: template <class T1, class T2> pair<T1, T2> make_pair(T1 x, T2 y);
如果make_pair用在了insert中,建議直接構造一個pair對象,然后再insert.
比較通用的方法是是static_cast強轉成右值引用。
例如:_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(iter_t->m_nID, pinfo));
這句代碼在vs2012的c++11就無法編譯,報2664錯誤??梢杂萌缦聫娭妻D換來實現:
_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(static_cast<uint32&&>(iter_t->m_nID),
staic_cast<CTransportInfoPtr&&>(pinfo)));
也可以這樣改:pair<uint32,CTransportInfoPtr> ps = pair<uint32,CTransportInfoPtr>((iter_t->m_nID,pinfo);
_mapTransportInfos.insert(ps);
如果make_pair用在了insert中,建議直接構造一個pair對象,然后再insert.
比較通用的方法是是static_cast強轉成右值引用。
例如:_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(iter_t->m_nID, pinfo));
這句代碼在vs2012的c++11就無法編譯,報2664錯誤??梢杂萌缦聫娭妻D換來實現:
_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(static_cast<uint32&&>(iter_t->m_nID),
staic_cast<CTransportInfoPtr&&>(pinfo)));
也可以這樣改:pair<uint32,CTransportInfoPtr> ps = pair<uint32,CTransportInfoPtr>((iter_t->m_nID,pinfo);
_mapTransportInfos.insert(ps);
posted on 2013-11-14 09:34 Benjamin 閱讀(3179) 評論(0) 編輯 收藏 引用 所屬分類: C/C++