Tôi đã sau đoạnstd :: is_default_constructible <T> lỗi, nếu constructor là tin
#include <type_traits>
#include <boost/type_traits.hpp>
class C { C() { } };
int main()
{
static_assert(!boost::has_trivial_default_constructor<C>::value, "Constructible");
static_assert(!std::is_default_constructible<C>::value, "Constructible");
}
điều kiện không bằng nhau, nhưng điều kiện đầu tiên công trình xây dựng tốt và thứ hai cho lỗi, constructor đó là tư nhân. Trình biên dịch gcc 4.7 ... Vậy, đây có phải là lỗi gcc hay được định nghĩa theo tiêu chuẩn?
http://liveworkspace.org/code/NDQyMD $ 5
OK. Từ điều kiện này thực sự bất bình đẳng - chúng ta có thể sử dụng một cái gì đó như thế này
#include <type_traits>
#include <boost/type_traits.hpp>
class C { private: C() noexcept(false) { } };
int main()
{
static_assert(!boost::has_nothrow_constructor<C>::value, "Constructible");
static_assert(!std::is_nothrow_constructible<C>::value, "Constructible");
}
http://liveworkspace.org/code/NDQyMD $ 24
Dù sao, tôi biết, static_assert rằng không nên thất bại, kể từ khi loại được thực sự không mặc constructible/không nothrow constructible. Câu hỏi là: TẠI SAO có lỗi biên dịch, không phải bởi khẳng định tĩnh của tôi?
Tôi hiểu ý của bạn bây giờ. Nó trông giống như một lỗi sau đó. – dasblinkenlight
Lưu ý rằng hai đặc điểm kiểm tra các thuộc tính khác nhau. – Xeo
@Xeo ok ... và làm thế nào về 'has_nothrow_constructor' và' is_nothrow_constructible'? – ForEveR