Junio C Hamano <gitster@xxxxxxxxx> writes: > ... I think what you ideally want to enforce is that > typeof(dst) is exactly typeof(src), or typeof(src) sans constness > (i.e. you can populate non-const array from a const template)? IOW, I am wondering if something like this is an improvement. git-compat-util.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git c/git-compat-util.h w/git-compat-util.h index a76d0526f7..be435615f0 100644 --- c/git-compat-util.h +++ w/git-compat-util.h @@ -97,8 +97,13 @@ struct strbuf; # define BARF_UNLESS_AN_ARRAY(arr) \ BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(__typeof__(arr), \ __typeof__(&(arr)[0]))) +# define ARRAYS_COPYABLE_OR_ZERO(src,dst) \ + (BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(__typeof__(src), \ + __typeof__(dst))) + \ + (0 ? *(dst) = *(src) : 0)) #else # define BARF_UNLESS_AN_ARRAY(arr) 0 +# define ARRAYS_COPYABLE_OR_ZERO(src,dst) (0 ? *(dst) = *(src) : 0)) #endif /* * ARRAY_SIZE - get the number of elements in a visible array