This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][GSoC] Extend shared_ptr to support arrays


On Sun, Jun 21, 2015 at 10:44 AM, Fan You <youfan.noey@gmail.com> wrote:
> passing the __lib_fund version should be fine here, since the
> __base_type will judg while doing _M_ptr = __r._M_prt.

This is correct only for now, but who knows what's gonna happen in the
future? Being more defensive and introduce less dependency (not let
shared_ptr depend on libfund_v1) is usually good.

>> Please be aware of spaces surrounding operators:
>> _GLIBCXX_DEBUG_ASSERT(get() != 0 && i >= 0);
>
> what does this mean?

Compare string "get() !=0" against "get() != 0", and " i>=0" against
"i >= 0", and see what you find :)

> Is it a good idea to change _Convertible alias to _Compatible in base.h?
>
>       template <typename _Tp1>
>         struct _is_compatible
>         {
>           bool value = (is_array<_Tp1>::value && is_array<_Tp>::value
>                                  && (is_same<typename
> remove_extent<_Tp1>::type, element_type>::value))
>                                || (is_convertible<_Tp1, element_type*>::value);
>         };
>
>       template<typename _Tp1>
>         using _Compatible
>           = typename enable_if<_is_compatible<_Tp1>().value>::type;

"or Y is U[N] and T is U cv []", not vice versa. So:
    std::experimental::shared_ptr<int[]> sp(new int[2]);
    std::experimental::shared_ptr<int[2]> spa(sp);
...shouldn't compile. You probably need some specialization to do this.

_is_compatible -> __sp_is_compatible seems to be better.


-- 
Regards,
Tim Shen


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]