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

时间:2018-06-15 23:38:03

标签: c++ clang initializer-list

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

首先,让我们定义一个小类,以便在重载operator,()时进行测试:

class Dummy {
public:
    Dummy() {}
    Dummy &operator,(int) { return *this; }
};

现在我们按以下方式使用此类:

int test1 = (Dummy{}, 0);

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

  

错误:没有可靠的转换来自' Dummy'到' int'

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

int test2 { (Dummy{}, 0) };

根据我的理解,这应该基本上触发相同的信息,因为最终我们试图在这里做同样的事情。但是,错误是不同的:

  

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

大问题void这里有一个错误,或者是否有一些转换或解释发生,我只是错过了?

Code snippet on Compiler Explorer

1 个答案:

答案 0 :(得分:2)

看起来像clang中的错误,请尝试this,确实是this