<html><head></head><body>Hi,<br><br>A static_assert failure *is* an error. Mismatched function pointer types should be a warning, not an error.<br><br>You're free to use Werror on your builds if you want.<br><br><div class="gmail_quote">Le 10 juillet 2019 14:35:17 GMT+03:00, Steve Lhomme <robux4@ycbcr.xyz> a écrit :<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">On 2019-07-10 12:42, Rémi Denis-Courmont wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">Hi,<br><br>As already stated yesterday, I don't see why this specific case grants an error any more than any other function pointer passing.<br></blockquote><br>It's more than an error, it's a static assert. It won't compile if you <br>use the wrong signature. IMO it's a good step in better code safety.<br><br>One drawback of this approach is when you change a signature you have to <br>change it in all modules, whereas before you could change the signature <br>and then each module individually. Not breaking compilation, just the <br>code running temporarily.<br><br>Warnings are usually ignored (see my other patches fixing long time <br>warnings).<br><br>We could have a static_assert in debug build and a warning in release <br>builds.<br><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">In any case, this wrongly causes an error if zero is passed as deactivate callback or if NULL is an integer.<br></blockquote><br>And if NULL is passed instead of nullptr in C++. It's easy enough to use <br>the proper value in that case.<br><br>For NULL I wasn't sure if it's always a void* in C11. It is in Clang <br>(linux, win32), gcc (win32) and MSVC.<br><br>There's typeof(NULL) but it seems to be a GNU extension :<br><a href="https://stackoverflow.com/questions/40143815/is-it-possible-to-implement-gnu-cs-typeofx-with-c11s-generic">https://stackoverflow.com/questions/40143815/is-it-possible-to-implement-gnu-cs-typeofx-with-c11s-generic</a><br><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">Le 10 juillet 2019 11:39:06 GMT+03:00, Steve Lhomme <robux4@ycbcr.xyz> a écrit :<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><hr> include/vlc_vout_display.h | 17 +++++++++++++++++<br> 1 file changed, 17 insertions(+)<br><br> diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h<br> index fd4940cf6d..1cbd6b1891 100644<br> --- a/include/vlc_vout_display.h<br> +++ b/include/vlc_vout_display.h<br> @@ -215,6 +215,23 @@ typedef int (*vout_display_open_cb)(vout_display_t<br> *vd,<br>   */<br> typedef void (*vout_display_close_cb)(vout_display_t *vd);<br><br> +#ifndef __cplusplus<br> +#define set_callbacks_display(Activate, Deactivate) \<br> +    static_assert( _Generic( Activate, vout_display_open_cb: 1,<br> default: 0 ) == 1, \<br> +                  "Not a display activate callback"); \<br> +    static_assert( _Generic( Deactivate, vout_display_close_cb: 1,<br> void*: 1, default: 0 ) == 1, \<br> +                  "Not a display deactivate callback"); \<br> +    set_callbacks( Activate, Deactivate )<br> +#else /* __cplusplus */<br> +#define set_callbacks_display(Activate, Deactivate) \<br> +    static_assert(<br> std::is_same<std::add_pointer<decltype(Activate)>::type,<br> vout_display_open_cb>::value, \<br> +                  "Not a display activate callback"); \<br> +    static_assert(<br> std::is_same<std::add_pointer<decltype(Deactivate)>::type,<br> vout_display_close_cb>::value || \<br> +<br> std::is_same<decltype(Deactivate),std::nullptr_t>::value, \<br> +                  "Not a display deactivate callback"); \<br> +    set_callbacks( Activate, Deactivate )<br> +#endif /* __cplusplus */<br> +<br> struct vout_display_t {<br>      struct vlc_object_t obj;<br><br> -- <br> 2.17.1<hr> vlc-devel mailing list<br> To unsubscribe or modify your subscription options:<br> <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br></blockquote>-- <br>Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.<hr>vlc-devel mailing list<br>To unsubscribe or modify your subscription options:<br><a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br><br></blockquote><hr>vlc-devel mailing list<br>To unsubscribe or modify your subscription options:<br><a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a></pre></blockquote></div><br>-- <br>Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.</body></html>