次のプログラムは、GCC4.7とclang3.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);
}
なぜ両方のコンパイラがそれが構築可能であると言うのですか?