[Code Clean] Using forward declarations.
[Code Clean] Move compiler-dependent stuff into config.