Suggested by @MarcoFalke after #14627 and possibly #14420. We should warn if an unrecognised/incorrect section is present in bitcoin.conf. i.e `[testnet]` is present instead of `[test]`.
{
protected:
    friend class ArgsManagerHelper;
    struct Arg
    {
        std::string m_help_param;
        std::string m_help_text;
        bool m_debug_only;
        Arg(const std::string& help_param, const std::string& help_text, bool debug_only) : m_help_param(help_param), m_help_text(help_text), m_debug_only(debug_only) {};
    };
    mutable CCriticalSection cs_args;
    std::map<std::string, std::vector<std::string>> m_override_args GUARDED_BY(cs_args);
    std::map<std::string, std::vector<std::string>> m_config_args GUARDED_BY(cs_args);
    std::string m_network GUARDED_BY(cs_args);
    std::set<std::string> m_network_only_args GUARDED_BY(cs_args);
    std::map<OptionsCategory, std::map<std::string, Arg>> m_available_args GUARDED_BY(cs_args);
    bool ReadConfigStream(std::istream& stream, std::string& error, bool ignore_invalid_keys = false);
public:
    ArgsManager();
    /**
     * Select the network in use
     */
    void SelectConfigNetwork(const std::string& network);
    NODISCARD bool ParseParameters(int argc, const char* const argv[], std::string& error);