(Known) compiler bug in VC12?((已知)VC12 中的编译器错误?)
问题描述
此程序在使用 VC12(在 Visual Studio 2013 RTM 中)编译时[1] 导致崩溃(在所有构建配置中),而实际上不应该:
This program, when compiled with VC12 (in Visual Studio 2013 RTM)[1] leads to a crash (in all build configurations), when really it shouldn't:
#include <string>
void foo(std::string const& oops = {})
{
}
int main()
{
foo();
}
我知道可能有两个无声的不良代码生成错误:
I know of two silent bad codegen bugs that might be related:
- https://connect.microsoft.com/VisualStudio/feedback/details/800364/initializer-list-calls-object-destructor-twice
- http://connect.microsoft.com/VisualStudio/feedback/details/800104/
老实说,我认为这些是不同的.有谁知道
Honestly I think these are different, though. Does anyone know
- 是否存在针对此连接的主动跟踪错误
- 是否有解决方法(或对导致此错误的情况的明确描述,以便我们可以在我们的代码库中查找/避免它)?
<小时>
[1] 只需使用 C++ 控制台应用程序向导"创建一个空项目.为简单起见,禁用预编译头并保留所有默认值:http://i.stack.imgur.com/rrrnV.png一个>
[1] Just create an empty project using the C++ Console Application 'wizard'. For simplicity, disable precompiled headers and leave all defaults: http://i.stack.imgur.com/rrrnV.png
推荐答案
一个活动问题已在 11 月.发布的示例代码是:
An active issue was posted back in November. The sample code posted was:
Compile and run following code in VS2013
#include <string>
void f(std::string s = {}) {
}
int main(int argc, char* argv[]) {
f();
return 0;
}
微软已确认该错误.
那里似乎没有发布解决方法.编辑解决方法很容易基于避免列表初始化语法:
There doesn't seem to be a work-around posted there. Edit Workarounds can easily be based on avoiding the list-initializer syntax:
void f(std::string s = "");
void f(std::string s = std::string());
void f(std::string s = std::string {});
或者只是老式的(如果你不介意引入重载):
Or just the old-fashioned (if you don't mind introducing overloads):
void f(std::string s);
void f() { f(std::string()); }
这篇关于(已知)VC12 中的编译器错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:(已知)VC12 中的编译器错误?
基础教程推荐
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01