Рассмотрим следующий код:
#include <cstdio>
struct A
{
A(){}
explicit A(const A&) {std::puts("copy");}
};
int main()
{
A a;
true ? a : A();
return 0;
}
Поскольку я понимаю, что троянец попытается скопировать a и должен потерпеть неудачу, поскольку конструктор копирования является явным, однако gcc компилирует это как раз и создает копию. Клэнг выплевывает ошибку, как ожидалось.
Это ошибка в gcc?
Я использую gcc 8.1 и clang 7.0 в режиме С++ 17, но я также пробовал все версии gcc в проводнике компилятора в режиме С++ 98, и все они ведут себя одинаково.