问题标签 [compiler-bug]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - (Default) construct an object for every variadic type
Consider this code snippet:
What I want to do here is to default construct two std::string
objects inside the Bar
method and pass them to Foo
. However my vain attempts (one of them being in the snippet) wont compile so I am wondering whether this is even possible.
I compiled with VC 2013, which throws compiler errors at me. As stated in the comments, other compilers can handle it. Can anyone tell whether the above snippet is standard conform?
gcc - GCC 4.8.1 的解决方法:抱歉,未实现:修改 argument_pack_select
考虑以下代码:
在 g++ 4.8.1 下,它产生:
有没有办法避免这个问题?是否已在 g++ 4.8.2 或 4.9.0 中报告和更正?
编辑:我刚刚在这里报告了这个错误:http: //gcc.gnu.org/bugzilla/show_bug.cgi?id= 60130
c++ - 使用可变参数模板时出现 G++ 错误
在 G++ 中,我得到
有没有其他人遇到过这个?这是编译器的实际错误还是我的代码中的错误?
我在跑
带有标志 -std=gnu++0x -O2 -g
c++ - C++:奇怪的“是私有的”错误
我从 g++ 中得到一个非常不寻常的错误,声称类型别名是私有的。经过数小时减少代码后,我得出了以下最小测试用例:
g++ 4.8.2 的错误是:
Clang 3.4 接受相同的代码。这是怎么回事,这是一个 g++ 错误吗?
执行以下任何操作都会阻止错误发生:
- 变成
Test
一个类,而不是一个模板类。 - 删除任何函数中的任何语句。
- 更改
TheCatDog::Dog::bark();
为CatDog::Dog::bark();
. - 删除
CrazyHouse
类并将其内容合并到Test
. - 删除
CatDog
类,将其内容合并到Test
并将TheCatDog
别名更改为指向Test
.
c++ - VS2013 上宏中的原始 C++11 字符串
似乎 Visual Studio 2013 编译器中存在一个关于 C++11 原始字符串支持的错误。
C++11 中的新原始字符串看起来像R"(\s(\d+))"
; 它们对于正则表达式和多行字符串非常方便。Visual Studio 2013(和 VS 2012 November CTP)支持它们,但如果你将原始字符串放在宏中(即使是简单的),可能会发生不好的事情。
这个简单的代码编译但断言失败:
笔记:
- 宏尽可能简单。
- 如果字符串内的右括号被删除,一切正常。
- 如果字符串内的反斜杠或
's'
字母被删除,则代码无法编译!
这真的是编译器错误吗?如果是,这是一个已知的错误吗?有解决方法吗?
memory-leaks - 带有“指针”参数的方法导致的 Free Pascal 中的内存泄漏
在用 ToBytes 方法(见下文)将 AnsiString 的硬类型转换替换为 TBytes(字符串数组)后,Delphi 报告没有内存泄漏 - 但是,Free Pascal 2.6.2 显示泄漏,以防 TBytes 值传递给具有类型的参数Pointer
。
以下代码泄漏内存:
内存泄漏报告:
如果我将 Send 方法更改为采用 TBytes 类型的参数,内存泄漏就会消失。
c++ - C++ 预处理器标准行为
我正在研究预处理器的确切行为的 C++ 标准(我需要实现某种 C++ 预处理器)。据我了解,我在下面编写的示例(以帮助我理解)应该是有效的:
我希望第一个函数(如宏调用)dds(eoe)
被替换为f(eoe,
(注意替换字符串中的逗号),然后将其视为f(eoe,su)
重新扫描输入的时间。
但是 VC++2010 的测试给了我这个(我告诉 VC++ 输出预处理文件):
这是违反直觉的,显然是不正确的。是 VC++2010 的 bug 还是我对 C++ 标准的误解?特别是,像我一样在替换字符串的末尾加上逗号是否不正确?我对 C++ 标准语法的理解是,任何preprocessing-token
' 都是允许的。
编辑:
我没有 GCC 或其他版本的 VC++。有人可以帮我验证这些编译器。
c++ - std::initializer_list 中的 std::shared_ptr 似乎过早地被破坏
编辑:这确实是由 Visual Studio 中的错误引起的 - 它已经被修复。将Update 2应用到 Visual Studio(此处提供候选版本)后,该问题无法重现。我道歉; 我以为我的补丁是最新的。
当我在 Visual Studio 2013 中运行以下代码时,我终生无法弄清楚为什么会出现段错误:
我期待着initializer_list
拥有创建shared_ptr
的 s 的所有权,将它们保持在范围内直到main
.
奇怪的是,如果我尝试访问列表中的第二项,我会得到预期的行为。例如:
考虑到这些事情,我猜这可能是编译器中的一个错误——但我想确保我没有忽略一些解释为什么会出现这种行为(例如,可能是在initializer_list
s 中如何处理右值)。
这种行为在其他编译器中是否可以重现,或者有人可以解释可能发生的事情吗?
c++ - 联合中的大括号或相等初始化器
标准说
最多一个联合的非静态数据成员可以有一个大括号或等号初始化器。
但
打印4196960:0
而不是预期的1:2
.
我认为这是一个编译器错误。是这样吗?