【发布时间】:2017-11-13 12:41:42
【问题描述】:
本程序由clang编译:
#include <mutex>
int main() {
std::mutex mtx;
const std::lock_guard<std::mutex>& lock(mtx);
return 0;
}
其他主要编译器拒绝它(我尝试过 gcc、msvc 和 icc)。这是来自 gcc 的错误消息:
error: invalid initialization of reference of type ‘const
std::lock_guard<std::mutex>&’ from expression of type ‘std::mutex’
其他人给出类似的错误。
clang 是对还是错?这可以用一个不涉及库类的更简单的例子来重现吗?我试过了,但没有用。
编辑这似乎是最小的复制:
struct A {};
struct X
{
explicit X(A&) {};
};
int main()
{
A a;
const X& x(a);
}
有趣的是,int 代替 A 确实会在 clang 中触发错误消息(这就是我最初无法重现此内容的原因)。
【问题讨论】: