contract C struct A { uint256 id; } function f(A memory a) external { } } If I change external to public, it compiles. But it doesn't work for external