Por que a afirmação is_constructible é construtível quando não é?
O programa a seguir, quando compilado com o GCC 4.7 e o clang 3.2, produz "1" como saída.
#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>();
}
Isso é confuso.foo
é claramente não construtível a partir deint
! Se eu mudarmain
para o seguinte, ambos os compiladores rejeitam devido a falha de declaração estática:
int main() {
foo(0);
}
Como é que ambos os compiladores dizem que é construtível?