Почему 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);
}

Почему оба компилятора говорят, что это конструктивно?

Ответы на вопрос(0)

Ваш ответ на вопрос