https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100135
--- Comment #2 from Nicolas Werner <nicolas.werner at hotmail dot de> --- Possibly the gcc behaviour here is correct. There is a clang bug open for it not rejecting calls to functions with default parameters, when the default parameter is not exported: https://github.com/llvm/llvm-project/issues/57459 However possibly that should only be an error at the call site instead of when compiling the module with that function declaration, when the function parameter can be legally specified at the call site. For example for foo(int i = unexported_constant) a call to foo(5) could be legal, even if only foo but not unexported_constant is exported? Not sure what the standard says on that, it sounds similar to CWG2631.