boost::operators автоматически определяет операторы типа + на основе ручных реализаций, таких как +=, что очень полезно. Чтобы сгенерировать эти операторы для T, один наследует от boost::operators<T>, как показано примером boost:
class MyInt : boost::operators<MyInt>
Я знаком с шаблоном CRTP, но я не вижу, как он работает здесь. В частности, я не наследую никаких объектов, поскольку операторы не являются членами. boost::operators кажется совершенно пустым, но я не очень хорошо читаю исходный код boost.
Может ли кто-нибудь объяснить, как это работает в деталях? Является ли этот механизм общеизвестным и широко используемым?