小编nam*_*ark的帖子

三元允许隐式调用显式复制构造函数?

请考虑以下代码:

#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 ,它们的行为都相同.

c++ gcc compiler-bug

11
推荐指数
1
解决办法
180
查看次数

标签 统计

c++ ×1

compiler-bug ×1

gcc ×1