Đối với struct này:GCC và Clang hành vi khác nhau trên constructor constexpr
struct Wrapper {
int value;
constexpr explicit Wrapper(int v) noexcept : value(v) {}
Wrapper(const Wrapper& that) noexcept : value(that.value) {}
};
Và chức năng này:
constexpr Wrapper makeWrapper(int v)
{
return Wrapper(v);
}
Các mã sau thất bại trong việc biên dịch cho Clang (Apple LLVM phiên bản 7.3.0), nhưng biên soạn tiền phạt cho GCC (4.9+), cả hai đều có -Wall -Wextra -Werror -pedantic-errors
:
constexpr auto x = makeWrapper(123);
Clang phàn nàn rằng không thể sử dụng "Trình tạo gói 'không phải là constexpr' Trình bao bọc 'trong một biểu thức liên tục." Trình biên dịch nào là đúng?
Không có trình biên dịch nào tại thời điểm này, điều gì sẽ xảy ra nếu bạn xóa trình tạo bản sao? – ZaldronGG
Repro với clang3.7 và gcc6.1, MCVE có thể sao chép [ở đây] (http://coliru.stacked-crooked.com/a/d72a2d90f44bb0dc), sửa cho cả hai trình biên dịch [ở đây] (http: //coliru.stacked- crooked.com/a/759e633b484f83a8). –
@Baum mit Augen tại sao không đăng câu trả lời? –