当我最近在构建一个项目时,我注意到我收到了关于BOOST_STRONG_TYPEDEF
重新定义宏的编译器警告(变成错误)。经过进一步调查,我注意到strong_typedef.hpp
boost 中包含两种不同的版本:一种在顶层,另一种在serialization/
.
这两个版本之间实际上也存在差异,而不仅仅是宏的重复版本。顶级版本没有明确地 value-init 它T
,而序列化版本有:
代码片段:
boost/strong_typedef.hpp
:
T t; \
explicit D(const T t_) : t(t_) {}; \
D(){}; \
D(const D & t_) : t(t_.t){} \
boost/serialization/strong_typedef.hpp
:
T t; \
explicit D(const T t_) : t(t_) {}; \
D(): t() {}; \
D(const D & t_) : t(t_.t){} \
为什么有两种不同版本的宏,哪一种作为实现更有意义?一种会强制初始化内置类型,还是不会(尽可能模仿被强类型定义的底层类型)?