0c0ee5810d
GCC 13.2.0 defaulted to gnu17 (__STDC_VERSION__ 201710L); GCC 16.1.0 defaults to gnu23 (202311L). The recipe tree is C17-era code, and C23 turns an empty parameter list from 'unspecified arguments' into 'no arguments', which is a hard error against a real prototype. Pin the cookbook's default C dialect to gnu17. This states the dialect these sources were written against rather than suppressing a diagnostic, and matches how the distributions handled the same GCC 14/15 transition. Packages migrate to C23 as they are touched; the pin is dropped when the tree is clean. A per-recipe -std= still wins, being appended after. C++ is deliberately NOT pinned -- kwin needs C++23, which is the entire point of the GCC 16 upgrade. Fix a real cookbook bug this exposed: CMAKE_CXX_FLAGS was built from CFLAGS, so the C dialect flag reached the C++ compiler and g++ reported "'-std=gnu17' is valid for C/ObjC but not for C++" on every file. The meson path already keeps c_args/cpp_args apart; CMake now matches. CPPFLAGS still reaches both, which is what carries the sysroot includes. First opportunistic C23 fix: libiconv's lib/loop_wchar.h declared 'extern size_t mbrtowc ();', conflicting with relibc's four-argument prototype. That declaration exists only for platforms whose <wchar.h> does not declare mbrtowc -- per its own comment, BeOS, which lacks mbstate_t and #defines it -- and the very next line already tests '#ifdef mbstate_t'. Moving it inside that guard keeps it where it is needed and drops it where a real prototype is in scope. libiconv now cooks clean against GCC 16.1.0.