If your constructor signature is much more solvable than it should be, then the problem is not is_constructible. In the original example
template <typename... Ts, typename=decltype(base{std::declval<Ts>()...})>
aggregate_wrapper(Ts&&... xs)
: base{std::forward<Ts>(xs)...} {}
performs this work. If is_constructible"false" gives a green light, so your constructor template may be mistakenly selected over other constructors because the overload resolution finds the best match.
/. , . is_constructible , , , SFINAE, - , , .
, , , is_constructible . , is_constructible .