The faulty code was mine. With the `pair` example, it is clear that all those `is_default_constructible<T>` are instantiated even when the default constructor is not. I think my intention when writing `Dummy && is_default_constructible<_Tp>::value` was to delay the instantiation of `is_default_constructible<_Tp>` as a compile-time optimization (which it fails to do), but not for correctness purposes.
However, looking at http://en.cppreference.com/w/cpp/types/is_default_constructible and then http://en.cppreference.com/w/cpp/concept/DefaultConstructible, I am unsure whether instantiating `is_default_constructible<_Tp>` should cause a hard error at all. If instantiating the default constructor in the expression _Tp x{} causes a compile-time error, should `is_default_constructible<_Tp>::value` be false or trigger a compile-time error? Summary: At a glance, the fix seems correct in that it will properly delay the instantiation of the `is_default_constructible<_Tp>`s. However, is there a bug in `is_default_constructible`? http://reviews.llvm.org/D7569 EMAIL PREFERENCES http://reviews.llvm.org/settings/panel/emailpreferences/ _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
