Can you make NS_ENSURE_TRUE(foo, /* */) and NS_ENSURE_TRUE(foo,) errors?
Maybe there's a better way to do this, but I think we could do
template<class T>
MOZ_ALWAYS_INLINE void EnsureIsLvalue(T t) {}
and then make NS_ENSURE_TRUE call EnsureIsLvalue on the second arg.
I'd want to check that this doesn't slow down our compilations, though.
On Sun, Dec 23, 2012 at 8:31 PM, Nicholas Nethercote
<[email protected]> wrote:
> Hi,
>
> This is a moderately common idiom:
>
> NS_ENSURE_TRUE(foo, );
>
> It also occurs with NS_ENSURE_FALSE and NS_ENSURE_SUCCESS. It's used
> in functions that return |void|.
>
> Unfortunately, it causes warnings with recent versions of clang, and
> they can turn into errors if you have --enable-warnings-as-errors.
>
> This alternative is sometimes is used instead, which (surprisingly
> enough) avoids the warning:
>
> NS_ENSURE_TRUE(foo, /* */);
>
> However, this trick isn't needed, because you can instead do this:
>
> NS_ENSURE_TRUE_VOID(foo);
>
> All of this applies to NS_ENSURE_FALSE and NS_ENSURE_SUCCESS, too.
>
> I've filed bug 824397 to convert the existing cases. Please use the
> _VOID forms in the future. Thanks!
>
> Nick
> _______________________________________________
> dev-platform mailing list
> [email protected]
> https://lists.mozilla.org/listinfo/dev-platform
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform