Что такое функция "extern inline" и когда использовать?

Есть такая вещь, и она находится в последней версии С++:

В § 7.1.2.4:

Встроенная функция должна быть определена в каждой единицы перевода, в которой он используется odr и должен иметь точно такое же определение в каждом случай (3.2). [Примечание: может появиться вызов встроенной функции прежде чем его определение появится в блоке перевода. - конец примечания] Если определение функции появляется в блоке перевода до первая декларация как встроенная, программа плохо сформирована. Если функция с внешней связью объявляется встроенным в одну единицу перевода, это должны быть объявлены встроенными во всех единицах перевода, в которых он появляется; диагностика не требуется. Встроенная функция с внешней связью должны иметь одинаковый адрес во всех единицах перевода. Статический локальный переменная во внешней встроенной функции всегда относится к тому же объект. Тип, определенный внутри тела внешней встроенной функции, один и тот же тип в каждой единицы перевода.

Некоторые сведения о том, что это такое и когда его использовать?

Ответ 1

extern избыточен для функций, поэтому бессмысленно объявлять функцию extern inline. Если, например, вы объявили функцию inline в глобальной области действия, применяются правила этого раздела. Аналогично, если вы объявили класс в глобальной области действия и определили функцию-член в определении класса, поскольку такая функция будет неявно inline.

Вопрос о том, когда вы должны объявить функцию inline, - это возможность червей, которую я не собираюсь открывать здесь. См.: Когда следует писать ключевое слово 'inline' для функции/метода?