I recently wrote a function template which takes a reference to a C-array:
template void foo(T(&c_array)[N]);
Apparently ISO C forbids 0-length arrays, which is probably affecting how GCC tries to compile stuff. See this question for further details! zero length arrays vs. pointers