As for the original question, this is such a pervasive breaking change, I think a new macro is inevitable I'm afraid :-(
New macro will do exactly what the old macro did, but using C++11 feature. Code in all Boost libraries will be changed to use new macro. So the old macro will be required only for users code that use macro and attempts to take address of constant...
To me, it looks less obscuring to have one macro and a note for users to use BOOST_CONSTEXPR_OR_CONST for out-of-line definition; than two macro (which one shall be used by default?) that do the same thing but very slightly differ in details.
Here's a radical idea: are there any compilers still around that we care about which require the enum workaround? Certainly not VC6 ;-) So we could recomend libraries use: template <class T> struct foo { BOOST_STATIC_CONSTEXPR bool value = some_value; }; template <class T> BOOST_CONSTEXPR_OR_CONST bool foo<T>::value; Thoughts? John.