Chương trình sau đây, khi được biên dịch bằng GCC 4.7 và clang 3.2, tạo ra "1" làm đầu ra.Tại sao việc xác nhận quyền sở hữu is_constructible có thể được cấu hình khi nó không được?
#include <type_traits>
struct foo {
template<typename T>
foo(T) {
static_assert(not std::is_same<int, T>(), "no ints please");
}
};
#include <iostream>
int main() {
std::cout << std::is_constructible<foo, int>();
}
Điều này gây nhầm lẫn. foo
là khá rõ ràng không thể xây dựng từ int
! Nếu tôi thay đổi main
đến sau, cả hai trình biên dịch từ chối nó do sự khẳng định tĩnh không:
int main() {
foo(0);
}
Tại sao cả hai trình biên dịch nói nó là constructible?
Bạn nên sử dụng enable_if để xóa ints khỏi các foos có thể. – PlasmaHH