Fix negative assertion
Throw with origial thrower info if available
Use c++14 return type deduction.
Correct include guard token.
Caller context is available only if GCC >=4.9.

https://gcc.gnu.org/PR59821