I think it's universally accepted that [`#include <bits/stdc++.h>` is bad practice](https://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h), in part because it parses and includes every standard header, which is almost always unnecessary (it's also nonportable, but that's beyond my point). It's even worse when combined with `using namespace std;` because now you have a ton of common names in your namespace, like `next`.

Yet, it seems that `#include <Windows.h>` is mostly deemed to be OK (it's used by most Win32 programs I've seen), even though it conceptually does the same thing as a combination of `#include <bits/stdc++.h>` + `using namespace std;`.

According to [Wikipedia](https://en.wikipedia.org/wiki/Windows.h):

> 
> **windows.h** is a Windows-specific header file for the C and C++ programming languages which contains declarations for all of the functions in the Windows API, all the common macros used by Windows programmers, and all the data types used by the various functions and subsystems. It defines a very large number of Windows specific functions that can be used in C.
> 
> 
> 

Why is this the case? Is it not possible to include specific headers we use and not include `<Windows.h>`?