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