Почему is_constructible утверждает, что что-то является конструктивным, если это не так?
Следующая программа, скомпилированная с GCC 4.7 и clang 3.2, выдает «1» в качестве вывода.
#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>();
}
Это смущает.foo
совершенно очевидно, не может быть построено изint
! Если я изменюmain
к следующему, оба компилятора отклоняют его из-за сбоя статического утверждения:
int main() {
foo(0);
}
Почему оба компилятора говорят, что это конструктивно?