Следующая программа, скомпилированная с помощью 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);
}
Почему оба компилятора говорят, что они конструктивны?