Question: Is this a macro defintion for a class or what exactly is it?

```
#define EXCEPTIONCLASS_IMPLEMENTATION(name, base, string) : public base     \
    {                                                               \
public:                                                                 \
    name() : base(string) {}                                            \
    name(const x::wrap_exc& next) : base(string,next) {};               \
    name(const x::wrap_exc& prev, const x::wrap_exc& next) :            \
        base(prev, next) {};                                            \
}

```

Answer: 
It *is* a macro definition for an exception class.

It looks somebody wants you to write code like this:

```
class my_exception EXCEPTIONCLASS_IMPLEMENTATION(my_exception, std::exception, "What a mess!")

```

The pre-processor will spit out:

```
class my_exception : public std::exception { public: my_exception() : std::exception("What a mess!") {} my_exception(const x::wrap_exc& next) : std::exception("What a mess!",next) {}; my_exception(const x::wrap_exc& prev, const x::wrap_exc& next) : std::exception(prev, next) {}; }

```

> 
> What exactly is it?
> 
> 
> 

It is an abomination!
it is macro for exception, that creates exception with standard constructors.