You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
struct of size of 0 does have its usage and it is supported by GNU C (https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html). However, make_unique makes it impossible to create such an unique_ptr because its default_delete requires "A" must have non-zero size.
struct A{
alignas(int[0]) int ptr[0];
};
void test(){
unique_ptr<A> ptr=make_unique<A>();
}
error: static assertion failed: can't delete pointer to incomplete type
83 | static_assert(sizeof(_Tp)>0,
| ~~~~~~~~~~~^~
I am not arguing that static_assert is reasonable. My point is that "make_shared" can actually deal this properly. i.e.
shared_ptr ptr=make_shared<A>();
gives no error at all.
p.s. I just realized that it is rather a library issue than a parser one as clang is directly using this library. Does clang plan to fix this library apart from GCC?
The text was updated successfully, but these errors were encountered:
See code in compiler explorer: https://www.godbolt.org/z/z8xf31bG4
struct of size of 0 does have its usage and it is supported by GNU C (https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html). However, make_unique makes it impossible to create such an unique_ptr because its default_delete requires "A" must have non-zero size.
I am not arguing that static_assert is reasonable. My point is that "make_shared" can actually deal this properly. i.e.
gives no error at all.
p.s. I just realized that it is rather a library issue than a parser one as clang is directly using this library. Does clang plan to fix this library apart from GCC?
The text was updated successfully, but these errors were encountered: