Il seguente programma, quando compilato con GCC 4.7 e clang 3.2, produce "1" come output.Perché is_constructible afferma che qualcosa è costruibile quando non lo è?
#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>();
}
Questo è confuso. foo
non è chiaramente costruibile da int
! Se cambio main
al seguente, entrambi i compilatori lo rifiutano a causa della mancanza di affermazione statica:
int main() {
foo(0);
}
Come mai entrambi i compilatori dicono che è costruibile?
Si consiglia di utilizzare enable_if per rimuovere gli inolt dai possibili foos. – PlasmaHH