The following program, when compiled with either GCC 4.7 and clang 3.2, produces "1" as output.
#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>();
}
This is confusing. foo
is quite clearly not constructible from int
! If I change main
to the following, both compilers reject it due to the static assertion failing:
int main() {
foo(0);
}
How come both compilers say it is constructible?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…