When we look at STL header files, we see many macros used where we could instead write single lines, or sometimes single word, directly. I don’t understand why people use so many macros. e.g.
_STD_BEGIN
using ::type_info;
_STD_END
#if defined(__cplusplus)
#define _STD_BEGIN namespace std {
#define _STD_END }
#define _STD ::std::
Library providers have to cope with a wide range of implementations and use case. I can see two reasons for use of macros in this case (and there are probably others I’m not thinking about now):
the need to support compilers which don’t support namespace. I’m not sure if it would be a concern for a recent implementation, but most of them have a long history and removing such macros even if compilers which don’t support namespaces are no more supported (the not protected
using ::type_info;hints that it is the case) would have a low priority.the desire to allow customers to use their implementation of the standard library in addition to the one provided by the compiler provider without replacing it. Configuring of the library would then allow to substitute another name for
std.