[squid-dev] [PATCH] Deletors for std::unique_ptr fixing r14735
Alex Rousskov
rousskov at measurement-factory.com
Sat Jul 30 00:07:23 UTC 2016
On 07/29/2016 04:56 PM, Alex Rousskov wrote:
> On 07/29/2016 12:29 PM, Alex Rousskov wrote:
> I found two macro-free ways to do this. The so called "smart" one does
> most of the work for us, but requires repeating the function name twice,
> once with decltype() and once without:
>
> typedef HardFun<decltype(BIO_vfree), &BIO_vfree> BIO_Deleter;
>
> A simpler implementation is arguably more verbose/repetitive:
>
> typedef HardFun<void, BIO*, &BIO_vfree> BIO_Deleter;
>
> For comparison, the macro-based approach yields:
>
> CtoDeleter(BIO, BIO_vfree); // declares BIO_Deleter
>
> And the current buggy trunk code is equivalent to this perfection:
>
> typedef std::function<decltype(BIO_free)> BIO_Deleter;
>
>
> Since the smarter implementation does not give a perfect result despite
> its tricks/complexity, I suggest going with the simpler one. The macros
> do not seem to be necessary (and HardFun offers better reuse
> possibilities than a macro if we need more hard-coded functors).
FWIW, it is easy to test the macro-free approach by redefining the macro
your patch adds to sources:
> +#define CtoDeleter(argument_type, function) \
> +typedef HardFun<void, argument_type*, &function> argument_type ## _Deleter
I tried that hack. Squid built, started, and processed a few trivial
transactions OK.
Alex.
More information about the squid-dev
mailing list