(已知)VC12 中的编译器错误?

2023-07-02C/C++开发问题
4

本文介绍了(已知)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. 是否存在针对此连接的主动跟踪错误
  2. 是否有解决方法(或对导致此错误的情况的明确描述,以便我们可以在我们的代码库中查找/避免它)?

<小时>

[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 中的编译器错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

无法访问 C++ std::set 中对象的非常量成员函数
Unable to access non-const member functions of objects in C++ std::set(无法访问 C++ std::set 中对象的非常量成员函数)...
2024-08-14 C/C++开发问题
17

从 lambda 构造 std::function 参数
Constructing std::function argument from lambda(从 lambda 构造 std::function 参数)...
2024-08-14 C/C++开发问题
25

STL BigInt 类实现
STL BigInt class implementation(STL BigInt 类实现)...
2024-08-14 C/C++开发问题
3

使用 std::atomic 和 std::condition_variable 同步不可靠
Sync is unreliable using std::atomic and std::condition_variable(使用 std::atomic 和 std::condition_variable 同步不可靠)...
2024-08-14 C/C++开发问题
17

在 STL 中将列表元素移动到末尾
Move list element to the end in STL(在 STL 中将列表元素移动到末尾)...
2024-08-14 C/C++开发问题
9

为什么禁止对存储在 STL 容器中的类重载 operator&amp;()?
Why is overloading operatoramp;() prohibited for classes stored in STL containers?(为什么禁止对存储在 STL 容器中的类重载 operatoramp;()?)...
2024-08-14 C/C++开发问题
6