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这里的错误或者是有一些转换或解释发生的事情我只是失踪?