https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104699

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
The std::is_array result is a consequence of the compiler not matching the
is_array<T[N]> partial specialization for int[0]:

using size_t = decltype(sizeof(0));
template<typename T> struct X { static constexpr bool value = false; };
template<typename T, size_t N> struct X<T[N]> { static constexpr bool value =
true; };
static_assert( ! X<int[0]>::value );

GCC, Clang, Intel and MSVC all agree here: the int[0] type does not match the
X<T[N]> partial specialization.

I don't think it would be reasonable for the library to work differently, and I
don't think it's reasonable to add kluges to make_shared to support creating an
object of a type that should only exist as a subobject of some other object.

Reply via email to