I want to define an operator<< for all enums, to cout the value and print that it is an enum like this:

code:

```
enum AnyEnum{A,B,C};
AnyEnum enm = A;
cout << enm <<endl;

```

output:

```
This is an enum which has a value equal to 0

```

I know a way of doing this with Boost library by using **is\_enum** struct. But I don’t understand how it works. So that's why, in general, I am interested how to identify if the veriable is a class type, union type or an enum (in compile time).