It's only the last year (or two?) that all 2 relevant compilers for me
support pure `noexcept`. Previously I used a macro CPPX_NOEXCEPT defined
as `noexcept` or `throw()` depending on the compiler. That technique
left no room for conditional no-throw.
I think the apparently useless complication of a conditional no-throw
thing is probably in support of the misguided decision to not require
move constructors to be no-throw, which presents a problem for a
std::vector (the example used in the original paper by Dave Abrahams &
one other) when it needs to reallocate and move the old items.
As a result of that decision, std::vector is now not exception safe,
which is a bit nasty! :(
Cheers,
- Alf