Clang错误 - 编译器错误或缺少一些细节?

Mar*_*rio 6 c++ clang initializer-list

在尝试使用可变参数模板,初始化程序列表等时,我偶然发现了以下无意义的代码,触发了一个相当有趣的错误消息.

首先,让我们定义一个用于重载测试的小类operator,():

class Dummy {
public:
    Dummy() {}
    Dummy &operator,(int) { return *this; }
};
Run Code Online (Sandbox Code Playgroud)

现在我们以下列方式使用这个类:

int test1 = (Dummy{}, 0);
Run Code Online (Sandbox Code Playgroud)

使用clang version 6.0.0 (tags/RELEASE_600/final 334239)此编译时会触发一个非常合理的声音错误消息(因为操作符实际上是0从后面剥离):

错误:没有可行的从'Dummy'到'int'的转换

现在让我们稍微改变一下这个例子:

int test2 { (Dummy{}, 0) };
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该基本上触发相同的消息,因为最后我们试图在这里做同样的事情.但是,错误是不同的:

错误:没有可行的从'void'到'int'的转换

大问题:是对void这里的错误或者是有一些转换或解释发生的事情我只是失踪?

编译器资源管理器上的代码片段

Pau*_*ers 2

看起来像 clang 中的一个错误,试试这个,确实是这个