Merge preprocessor code from viboes branch.
Add the static addressof in detail namespace.
Rename member error to error_ and merge exception and traits.
Delete tests that didn't apply anymore.