inline
имеет две цели, но больше не имеет значения только одна.
Как уже говорили другие, цель подсказки компилятору о том, что функция должна быть встроена, практически бесполезна.Компилятор гораздо лучше определяет, что должно быть встроено, чем программист.
Однако, второе важное применение (которое применяет в вашем случае) состоит в том, что он нарушает правило одного определения (УСО).То есть, при нормальных обстоятельствах компоновщик не должен принимать видение символа, определенного более одного раза.Однако, если этот символ был объявлен inline
, он может предположить, что определение каждого из них одинаково, а остальные игнорировать.
Поскольку ваша функция находится в заголовочном файле, она может быть определена более чем водна единица перевода, поэтому вам нужно отключить ODR, чтобы ваш код компилировался без ошибок.