Used in the public API, so should not use forward declaration.