I have the following code:

Header file:

```
#pragma once

#include <uWS/uWS.h>

typedef __uint32_t ClientID;
typedef __uint16_t Port;

class ClientServer
{
public:
    ClientServer();
    ClientServer(const ClientServer&) = delete;
    ClientServer& operator=(const ClientServer&) = delete;
    ~ClientServer();

    bool run(const std::string& host, Port port);
    bool disconnect();

    bool isConnected(ClientID id);
    bool send(std::initializer_list<ClientID> idList, const std::wstring& message);
};

```

Source file:

```
#include <stdint.h>
#include <string>
#include <initializer_list>

#include "client_server.h"

ClientServer::ClientServer()
{
}

```

As you can see the header file uses some std classes like `std::string`, `std::initializer_list`, the types from `<stdint.h>`. And this code compiles, why the header file sees the imported headers in the source?