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

qingzhe huang <nickhuang99 at hotmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nickhuang99 at hotmail dot com

--- Comment #2 from qingzhe huang <nickhuang99 at hotmail dot com> ---
(In reply to Jonathan Wakely from comment #1)
> It says GNU C, not C++. But in any case, that example works fine for me, as
> does the simpler:
> 
> template<typename T> struct S { };
> S<int[0]> s;
> 
> Please provide the info you were asked to provide by https://gcc.gnu.org/bugs

https://www.godbolt.org/z/8xa1dTzdM

#include <type_traits>
static_assert( ! std::is_array<int[0]>::value);

And as a directly result, it causes "make_shared" fails with "int[0]"
https://www.godbolt.org/z/8nE6qojaE

shared_ptr<int[0]> ptr=make_shared<int[0]>();
...
error: request for member '~int [0]' in '* __location', which is of non-class
type 'int [0]'
   88 |         __location->~_Tp();
      |         ~~~~~~~~~~~~~^~~

This is the direct result of template specialization "is_array<int[0]>" is
ill-format code or something.

Reply via email to