Das folgende Programm, wenn mit GCC 4.7 und clang 3.2 kompiliert, erzeugt "1" als Ausgabe.Warum ist is_constructible Anspruch etwas ist konstruierbar, wenn es nicht ist?
#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>();
}
Dies ist verwirrend. foo
ist ganz eindeutig nicht konstruierbar von int
! Wenn ich main
der folgenden ändern, lehnen beide Compiler da es auf die statische Behauptung Versagen:
int main() {
foo(0);
}
Wie kommen beide Compiler sagen, es konstruierbar ist?
Sie sollten lieber enable_if verwenden, um Ints von den möglichen Foos zu entfernen. – PlasmaHH