¿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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta