在帕特上周关于 在Visual Studio 2012中修复的MFC错误 (又名VC11),我认为STL的类似列表会很有趣:
身份证件 | 职务 |
492128 | std::locale构造函数通过“setlocale()”修改全局区域设置 |
492561 | STL流不能同时使用 |
498533 | iostream应该使用其嵌入语言环境的代码页,而不是当前的c语言环境 |
506966 | 新的警告4986在警告级别4时阻止干净编译 |
524342 | 在Visual C++中实现STD::Max |
532883 | VisualC++:不总是签名 |
532897 | VC-RC中由无符号long构造位集的问题 |
533131 | std::deque中的错误。popu front()后迭代器的不一致失效 |
533464 | VC10发行候选中的 |
534457 | C++ Map < tuple <…>,v>编译问题 |
534756 | std::isu函数不适用于rvalue引用类型 |
539946 | 搜索失败,出现调试断言 |
540098 | non const operator()和bind有问题 |
540813 | 添加对新C++ 0x库的支持 |
541226 | C++缺陷报告445的实现 |
548693 | VisualC++:使用/J时数值限制< char > min / max不正确 |
552541 | Visual C++ 2010中的库或编译器缺陷 |
553629 | Visual C++在PurthBead中强制转换为字符 |
556348 | C++编译器零故障? |
557117 | STD:VisualC++ 2010中的无序序集相等性比较 |
558044 | std::copy不应在u First==u Last时检查u Dest |
558339 | tr1:regex在某些正则表达式上的行为与vs2008和vs2010不同 |
558993 | std::pair成员不是std::pair的成员 |
560987 | 在VisualC++ 2010中,STD::Tr1::SouffLyOrthOracle引擎错误地定义了MIN和MAX成员,使类(和STD::Tr1::KuuthHyb)不可用。 |
560994 | 在VisualC++ 2010中,STD::Tr1:: DisteTyl分发和STD::Tr1::NoffigyBIOMIALIL分布缺少嵌套的输入类型类型,使它们不能与STD::Tr1::ValueTyx生成器不可用。 |
565500 | 用/MDD和/VD2编译时C++运行时崩溃 |
565748 | 在C++ 0x中包含支持编译时间的Rational算法 |
566516 | std::ifstream/std::ofstream更改双值 |
567859 | VisualC++:STD::调试配置中无序的映射析构函数性能 |
568054 | std::useu facet会干扰对FatalExit的后续调用 |
569997 | [VC10]编译器将std::sharedu ptr引用为std::tr1::sharedu ptr |
571397 | C++SETFEP不能应用于WFSCORT——刺激性错误消息 |
576750 | [ C++ 0x] STD::toSype是不符合的 |
577672 | 由于vc10中的stl更改,调试版本中的迭代器分配运算符崩溃 |
596771 | type_info::before返回int类型而不是bool |
598887 | 无法为set::insert提供常量迭代器 |
603381 | VS2010 STL for每个实现都会中断现有代码 |
606746 | 过载分辨率不正确 |
612692 | 标准::位集 |
616702 | 运算符>>用于将多字节字符集作为区域设置的基本u istream崩溃 |
616827 | 嵌套的std::bind函数产生错误(没有对正在编译的文件的引用) |
618807 | 通过std::函数变量调用绑定lambda |
621653 | 在intsafe之后包含stdint会生成警告 |
626291 | STL hash元素不能散列自定义分配的字符串 |
627639 | 即使在x64平台上,fstream也使用32位int作为posu类型 |
628197 | 当擦除到最后时,std::string::erase非常慢,这会影响std::string::resize |
633809 | 标准::螺纹 |
633905 | VisualC++:不成形的UNQuYGYPTR函数调用语法 |
635833 | std::uniformu int分布和std::uniformu int未返回正确值 |
635837 | std::uniformu int分布的低值,设置为负数时std::uniformu int不出现 |
640602 | VS2010调试器:监视带有u ITERATOR u DEBUG u LEVEL=0的std::string不起作用 |
640619 | 移动构造可以分割对象 |
640961 | VisualC++:STD中的参数转发错误::绑定函数调用方 |
641845 | vs2010中的std::regex bug |
642277 | vs2010中的std::regex bug |
642557 | [随机]均匀分布会产生超出范围的结果 |
642600 | 系统错误::what()返回不正确的值 |
645116 | VC10 STL:多个参数未实现安放函数 |
645641 | 由于非法使用迭代器,tr1 regex在调试生成中崩溃 |
646532 | strsafe.h使用STL头文件触发许多警告 |
648543 | tr1::regex与重复的有效模式不匹配 |
649268 | std::bind和std::function生成大量副本。 |
649274 | std::bind和std::function不支持移动 |
649531 | 显式实例化共享u ptr时出现编译错误 |
650567 | 未包含的std::locale::facet和std::locale::Locimp析构函数会导致崩溃 |
651285 | ref与重载运算符的类一起工作不正确& |
668921 | std::数字u限制 |
671328 | VisualC++:用STD::用户定义的绑定表达式:绑定 |
674424 | tr1 regex不区分大小写搜索不工作 |
674652 | MSVC 2010中std::minmax的不一致行为 |
680313 | 合并使源数据无效,因为它使用移动语义 |
683483 | MFC C++在调试配置中编译使用CODECVTTUTF8失败 |
685726 | INT64u C和UINT64u C应该以更跨平台的方式定义 |
688731 | std::bind with std::reference_wrapper |
688797 | std::线程崩溃,错误为“f:ddvctoolscrtu bldselfu x86crtsrc hrmutex.cpp(206):解除无主互斥锁的锁定” |
689342 | 无序映射比vc++2010版本慢千倍 |
689689 | VisualC++(VS2010):均匀分布的不正确返回值 |
692248 | Visual C++ OSTRIGSWORD和IOSKASEAS::应用程序中断 |
692988 | std::vector::resize应采用常量引用 |
694663 | 检查内部std::vector::_Reserve()触发整数下溢,无法检测传递给std::vector::resize()的无效参数 |
694704 | std::vector::reserve()包含针对最大u大小的次优检查 |
694705 | std::vector::_Insert()包含一个针对最大大小的次优检查 |
694881 | std::vector::_Reserve()包含一个针对最大u大小的次优检查 |
694887 | std::vector::u Insert u n()包含一个与max u size次优的检查 |
695529 | std::exceptionu ptr不满足NullablePointer的要求 |
696109 | std::pair-move构造函数不符合标准,对引用有潜在的危险行为 |
696151 | std::referenceu包装器不能与lambda函数一起使用 |
696316 | std::deque::resize()注释中的输入错误 |
698286 | std::begin和std::end ADL查找失败 |
705089 | C++ STD::原子< >缺失构造函数 |
705152 | 此std::codevt模板的实例化不符合std::codevt::out的标准要求 |
705993 | 标准库的defaultvis.natvis visualizers中存在不正确的类型名引用 |
707067 | 未能分析表达式:类“std::u Refu countu base”没有成员“Uses” |
712897 | xstddef中的##VAR_类型中的##参数无效 |
712984 | 当min0为负时,均匀分布产生不正确的结果 |
714853 | valarray运算符[]const |
716468 | 从makeu shared调用CObject派生类时从构造函数抛出堆损坏 |
716995 | makeu shared需要默认构造函数来编译 |
718865 | STL:cmath未将hypot提升到std名称空间 |
721456 | 调试器无法显示std::string的内容–“ |
721786 | 对于64位平台,stdint.h uintpttru MAX的值与UINT32u MAX的值相同 |
723427 | 互斥中的编译错误 |
726398 | 使用std::thread类创建线程会导致应用程序崩溃 |
727368 | std::reference包装器无法包装对抽象类对象的引用 |
727374 | std::exceptionu ptr只能部分与null比较 |
729760 | 对于具有两个或多个参数的Callable,异步编译失败。 |
730454 | C++ 11标准库中可变模板的仿真不起作用 |
732529 | 不使用函子的结果 |
733204 | std::映射调试可视化程序不适用于vs2011 |
733222 | |
733729 | 调试断言“字符串下标超出范围”对于[size()]不正确 |
734888 | 无序集合中的共享u ptr |
735224 | VS2011测试版激发了关于解锁无主互斥锁的断言 |
735731 | std::async(std::launch::async,…)的行为与std::thread(…)不同 |
735732 | 向量插入问题的STL向量 |
735875 | std::putU time输出错误 |
736356 | 传递给 |
736924 | 打包任务和线程编译错误 |
737812 | std::thread不接受std::move |
738919 | std::locale::global()/std::locale()线程安全问题 |
739016 | std::makeu shared call error(c++) |
742642 | 重载函数std::string to_string(int val)的用法不明确; |
742856 | std::async的错误? |
742965 | 运算符<对于成员数大于u VARIADIC u MAX的元组不正确 |
745614 | |
745643 | “std::genericu category”、“std::iostreamu category”、“std::systemu category”上出现错误C2382 |
745967 | 在Visual C++ 2012 RC中用标准头文件< StulsError >编译错误C23 |
关于 各种神秘话题:
这个127个bug的列表包含了我在“旧数据库”和“新数据库”中发现的所有bug 数据库(我们使用Team Foundation Server进行bug跟踪和版本控制,但是几年前我们切换了TFS数据库,使考古探险“有趣”)是由Connect创建的,针对C++标准库提出的,由我解决,作为固定的,并固定在VC10 SP1和VC11 RTM之间。 相当全面, 但它可能不是绝对详尽的。 我特意排除了所有非连接错误(Connect、我自己和其他微软员工发现的修复错误总数约为330个——这还不算真正的错误,但从未被跟踪过的东西)和私有连接错误(一些提交连接错误的人会将它们标记为私有,我建议不要这样做,除非bug的repro包含了你不想让世界看到的信息)。 此外,我也没有尝试将那些被解析为已修复的、实际上是重复的bug进行分组(例如,通过全面重写修复的许多统一分布bug)。
我已经从提交者那里展示了bug的原始标题,尽管它们经常在内部重命名。 这几乎没什么意思(我喜欢某种格式,所以我的bug排序很好),但我可以分享一个例外。 Connect#533464作为“VC10发行候选中的
最后,您可能想知道这些bug都是从哪里来的。 (我把所有的STL bug都放在个人身上,我不希望有人看到这个列表,到处想“哇,STL真是个bug”。) 我们的STL实现非常可靠,但是它也非常庞大,必须处理各种各样的复杂情况。 C++ 11的搅动导致了两类错误:那些工作文件在我们实现它时说了一些虚假的东西(例如,这发生在tojStReg()、BITSET和Acsic())中, 以及那些允许比我们以前必须处理的更复杂的输入(通常是r值引用和只允许移动的类型)。 全新的特性(例如原子/线程/未来)带来了全新的bug。 用户经常会做一些“奇怪的事情”(比如晦涩难懂的编译器开关,比如/J和/vd2)。 而且由于STL无法控制用户的性能要求有多高,因此在普通应用程序代码中进行不成熟的优化会被视为STL中完全合法的性能缺陷。 (例如,一位用户建议在vector中进行一些微优化,并在VC11中实现。)
底线是我们在不断改进STL,所以您应该总是尽快升级到最新的主要版本和服务包,并通过 微软连接 真的很有帮助。
![]() |
斯蒂芬T。拉瓦维 高级开发人员——Visual C++库 stl@microsoft.com |