以下程序在使用 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);
}
为什么两个编译器都说它是可构造的?