请考虑以下代码:
#include <cstdio>
struct A
{
A(){}
explicit A(const A&) {std::puts("copy");}
};
int main()
{
A a;
true ? a : A();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,三元组会尝试复制a并且应该失败,因为复制构造函数是显式的,但是gcc编译它就好并创建一个副本.Clang按预期吐出错误.
这是gcc中的错误吗?
我在c ++ 17模式下使用gcc 8.1和clang 7.0,但我也在c ++ 98模式的编译器资源管理器中尝试了所有版本的gcc ,它们的行为都相同.