(轉(zhuǎn)載請(qǐng)注明來源于金慶的專欄)
我還在用的VC6本來早就該升級(jí)了,畢竟VC已經(jīng)從VC6經(jīng)歷7.0、7.1、8.0,現(xiàn)在已經(jīng)到了VC9(VC2008)了。
只是我比較戀舊,想想我的機(jī)器也受不了MS頻繁的升級(jí),現(xiàn)在的機(jī)器也就免強(qiáng)能跑跑VC6。
但是現(xiàn)在C++標(biāo)準(zhǔn)升級(jí)了,GCC也升級(jí)了,VC6 真的已經(jīng)是必須丟棄的雞骨頭了。
VC6自帶的std::string的引用計(jì)數(shù)在多核上讓我受苦,查錯(cuò)一周有余才找到這個(gè)原兇。后來就促使我將stl庫替換為StlPort。
boost.asio庫明確說明不支持VC6。
stlsoft庫某些組件無法兼容VC6(詳細(xì)閱讀了《Extended STL》,才知道為了VC6要耗費(fèi)大量的精力,有些組件本身已很復(fù)雜,以至于需要排除VC6才能實(shí)現(xiàn)。)
今天使用boost.date_time時(shí)又發(fā)現(xiàn)VC6不行了。
time_formatters.hpp(72) : error C2664: '_i64toa' : cannot convert parameter 2 from 'unsigned short [32]' to 'char *'
time_formatters.hpp相應(yīng)代碼為:
VC6的_MSC_VER是1200,這段代碼明顯是針對(duì)VC6的。
可惜JDG的簡單補(bǔ)丁并沒有考慮VC6+STLP的情況,_i64toa()只能接受char buff,對(duì)于wchar則報(bào)以上錯(cuò)誤。
實(shí)際上有StlPort,根本不必調(diào)用_i64toa(),因?yàn)閕nt64_t在StlPort中是可以直接流式輸出的。
為什么只用到char,仍會(huì)對(duì)wchar實(shí)例化?為什么data_time的庫編譯會(huì)成功?這些仍是問題。
不用Stlport就不會(huì)報(bào)這個(gè)錯(cuò),可見wchar特化的實(shí)例化只在stlport環(huán)境下才進(jìn)行。
查看date_time的文檔,明確支持的VC版本只有VC7.1。
VC8有些問題。VC6、7已停止正式的支持。
看來我該升級(jí)了,先升級(jí)我的機(jī)器。
我還在用的VC6本來早就該升級(jí)了,畢竟VC已經(jīng)從VC6經(jīng)歷7.0、7.1、8.0,現(xiàn)在已經(jīng)到了VC9(VC2008)了。
只是我比較戀舊,想想我的機(jī)器也受不了MS頻繁的升級(jí),現(xiàn)在的機(jī)器也就免強(qiáng)能跑跑VC6。
但是現(xiàn)在C++標(biāo)準(zhǔn)升級(jí)了,GCC也升級(jí)了,VC6 真的已經(jīng)是必須丟棄的雞骨頭了。
VC6自帶的std::string的引用計(jì)數(shù)在多核上讓我受苦,查錯(cuò)一周有余才找到這個(gè)原兇。后來就促使我將stl庫替換為StlPort。
boost.asio庫明確說明不支持VC6。
stlsoft庫某些組件無法兼容VC6(詳細(xì)閱讀了《Extended STL》,才知道為了VC6要耗費(fèi)大量的精力,有些組件本身已很復(fù)雜,以至于需要排除VC6才能實(shí)現(xiàn)。)
今天使用boost.date_time時(shí)又發(fā)現(xiàn)VC6不行了。
time_formatters.hpp(72) : error C2664: '_i64toa' : cannot convert parameter 2 from 'unsigned short [32]' to 'char *'
time_formatters.hpp相應(yīng)代碼為:
//TODO the following is totally non-generic, yelling FIXME
#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
boost::int64_t frac_sec =
date_time::absolute_value(td.fractional_seconds());
// JDG [7/6/02 VC++ compatibility]
charT buff[32];
_i64toa(frac_sec, buff, 10);
#else
#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
boost::int64_t frac_sec =
date_time::absolute_value(td.fractional_seconds());
// JDG [7/6/02 VC++ compatibility]
charT buff[32];
_i64toa(frac_sec, buff, 10);
#else
VC6的_MSC_VER是1200,這段代碼明顯是針對(duì)VC6的。
可惜JDG的簡單補(bǔ)丁并沒有考慮VC6+STLP的情況,_i64toa()只能接受char buff,對(duì)于wchar則報(bào)以上錯(cuò)誤。
實(shí)際上有StlPort,根本不必調(diào)用_i64toa(),因?yàn)閕nt64_t在StlPort中是可以直接流式輸出的。
為什么只用到char,仍會(huì)對(duì)wchar實(shí)例化?為什么data_time的庫編譯會(huì)成功?這些仍是問題。
不用Stlport就不會(huì)報(bào)這個(gè)錯(cuò),可見wchar特化的實(shí)例化只在stlport環(huán)境下才進(jìn)行。
查看date_time的文檔,明確支持的VC版本只有VC7.1。
VC8有些問題。VC6、7已停止正式的支持。
看來我該升級(jí)了,先升級(jí)我的機(jī)器。