Поскольку я недавно создавал проект, я заметил, что я получил предупреждение компилятора (обращено к ошибке) о переопределении макроса BOOST_STRONG_TYPEDEF
. При дальнейшем исследовании я заметил, что в boost есть две разные версии strong_typedef.hpp
: один на верхнем уровне и один внутри serialization/
.
На самом деле существует разница между двумя версиями, а не только дублирующаяся версия макроса. В версии верхнего уровня явно не указано значение-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){} \
Почему существуют две разные версии макроса, и какая из них имеет смысл в качестве реализации? Тот, который будет принудительно инициализироваться встроенными типами, или тот, который этого не делает (насколько это возможно, мимируя, чтобы базовый тип был сильно типизирован)?