作者:金庆 来源:C++博客 酷勤网收集 2008-03-15
摘要
现在C++标准升级了,GCC也升级了,VC6 真的已经是必须丢弃的鸡骨头了。VC6自带的std::string的引用计数在多核上让我受苦,查错一周有余才找到这个原凶。后来就促使我将stl库替换为StlPort。boost.asio库明确说明不支持VC6。
只是我比较恋旧,想想我的机器也受不了MS频繁的升级,现在的机器也就免强能跑跑VC6。
但是现在C++标准升级了,GCC也升级了,VC6 真的已经是必须丢弃的鸡骨头了。
VC6自带的std::string的引用计数在多核上让我受苦,查错一周有余才找到这个原凶。后来就促使我将stl库替换为StlPort。
boost.asio库明确说明不支持VC6。
stlsoft库某些组件无法兼容VC6(详细阅读了《Extended STL》,才知道为了VC6要耗费大量的精力,有些组件本身已很复杂,以至于需要排除VC6才能实现。)
今天使用boost.date_time时又发现VC6不行了。
time_formatters.hpp(72) : error C2664: '_i64toa' : cannot convert parameter 2 from 'unsigned short [32]' to 'char *'
time_formatters.hpp相应代码为:
//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,这段代码明显是针对VC6的。
可惜JDG的简单补丁并没有考虑VC6+STLP的情况,_i64toa()只能接受char buff,对于wchar则报以上错误。
实际上有StlPort,根本不必调用_i64toa(),因为int64_t在StlPort中是可以直接流式输出的。
为什么只用到char,仍会对wchar实例化?为什么data_time的库编译会成功?这些仍是问题。
不用Stlport就不会报这个错,可见wchar特化的实例化只在stlport环境下才进行。
查看date_time的文档,明确支持的VC版本只有VC7.1。
VC8有些问题。VC6、7已停止正式的支持。
看来我该升级了,先升级我的机器。
来自:http://www.cppblog.com/jinq0123/archive/2008/03/14/vc6dropped.html

