philnik added a comment. TBH I don't think adding these builtins is worth the extra maintenance cost. libc++'s implementation is already really simple, and actually //uses// `__is_constructible`, contrary to the statement in the summary. This is the whole implementation currently:
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_copy_constructible : public integral_constant< bool, __is_constructible(_Tp, __add_lvalue_reference_t<typename add_const<_Tp>::type>)> {}; #if _LIBCPP_STD_VER > 14 template <class _Tp> inline constexpr bool is_copy_constructible_v = is_copy_constructible<_Tp>::value; #endif I don't think adding an extra `#if __has_builtin(...)` is worth it in this case, since we already use builtins for most of it. IMO the effort would be better spent adding a builtin for `add_const`; that would probably make the implementation about as efficient as adding a builtin specifically for `is_copy_constructible`. It would effectively just be `__is_constructible(_Tp, __add_lvalue_reference(__add_const(_Tp)))`. The `trivially` and `nothrow` versions look very similar, just with `__is_trivially_constructible` and `__is_nothrow_constructible` respectively. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D135238/new/ https://reviews.llvm.org/D135238 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits