¿Por qué is_constructible afirma que algo es construible cuando no lo es?
El siguiente programa, cuando se compila con GCC 4.7 y clang 3.2, produce "1" como salida.
#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>();
}
Esto es confuso.foo
claramente no es construible desdeint
! Si cambiomain
a lo siguiente, ambos compiladores lo rechazan debido a la falla de la aserción estática:
int main() {
foo(0);
}
¿Cómo es que ambos compiladores dicen que es construible?