为什么 Boost.Hana 对 opening/closing 命名空间使用宏?

Why does Boost.Hana use macros for opening/closing namespaces?

分别使用两个宏来打开和关闭 namespace 的许多示例之一在 /usr/include/boost/hana/transform.hpp:

BOOST_HANA_NAMESPACE_BEGIN
// stuff
BOOST_HANA_NAMESPACE_END

那些宏在/usr/include/boost/hana/config.hpp中是这样定义的:

#define BOOST_HANA_NAMESPACE_BEGIN namespace boost { namespace hana {

#define BOOST_HANA_NAMESPACE_END }}

这样做有什么好处?

(考虑到至少有一个缺点:它使得从 namespace 秒的开头和结尾来回跳转变得更加困难。)

这最初是为了与使用内联命名空间的向前兼容,但这从未变得相关。我重新打开 https://github.com/boostorg/hana/issues/288 并将其更改为正常的命名空间声明。