https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89937
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- But more generally, Andrew's point is that you're comparing apples and oranges. If you declare the function "extern inline" then it has similar semantics in both C and C++, and you get similar code (with an extern definition generated). If you declare it "static inline" then it has similar semantics in both C and C++, and you get similar code (with no extern definition generated). If you just declare it "inline" then that means different things in C and C++, and the compiler treats it differently. That's not a bug, it's because the code means something different in C and C++.