在vs2012(c++11)make_pair()改動:
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錯誤。可以用如下強制轉換來實現:
_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);