[vlc-devel] [PATCH] vlc_common: Add C++ memory management helpers

Filip Roséen filip at atch.se
Fri Jul 13 10:37:58 CEST 2018

Hi Hugo,

I took the liberty of joining your two messages into one, for the
curious this email is in-reply to:

 - https://mailman.videolan.org/pipermail/vlc-devel/2018-July/120262.html
 - https://mailman.videolan.org/pipermail/vlc-devel/2018-July/120261.html

On 2018-07-13 10:12, Hugo Beauzée-Luyssen wrote:

> That's my current plan, new file, new namespace for C++ helpers!
> Although the issue here is that having this function non-static or in
> a non-anonymous namespace will trigger a warning if -Wnoexcept-type is
> enabled (which it is when using -Wall) so maybe this functions will be
> in an anonymous namespace? Or we can disable the warning specifically,
> which I believe would be safe since we only care about our C ABI

Just put the named namespace within an anonymous namespace, internal
linkage, and in a namespace; best of both worlds.

     namespace { namespace hugos_awesome_things { ... } }

> So if I understand correctly, the correct noexcept expression would
> be something along the line of
> noexcept( std::is_reference<T>::value == false ||
> std::is_lvalue_reference<decltype(Releaser)>::value == true )

 You can simply mark the function as `noexcept`, that's it. If there
 is an exception from constructing the `std::unique_ptr` all bets are
 off anyhow (as that exception from within the `noexcept` marked
 *unique_ptr* constructors causes *undefined-behavior*).

> And probably a static_assert should be added to warrant that in case
> of a non-ref type, copy/move ctors is non-throwing?

Yes, you could add a `static_assert` to prevent what has been
described, but I think it is enough to simple document the fact that a
`std::unique_ptr` will be created with the parameters passed.

By the way, Personally I would implement the two overloads involving
`&free` by using the custom ones; less typing!

Best Regards,\
Mr. Lazy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20180713/5641ceb3/attachment.html>

More information about the vlc-devel mailing list