Стандарт гласит, что с учетом декларации
inline void foo();
, что foo
- это встроенная функция с внешней связью (поскольку по умолчанию все объявления функций имеют внешнюю связь). Это кажется мне странным. потому что один раздел определения правила 3.2 (как в C ++ 03, так и в C ++ 11) говорит:
3 ... Встроенная функция должна быть определена в каждой единице перевода, в которой она используется.
5 Может быть более одного определения встроенной функции [n] ... с внешней связью (7.1.2) ... Учитывая, что такая сущность с именем D определена в более чем одной единице перевода ... каждое определение из D должен состоять из одинаковой последовательности токенов
Это означает, что встроенная функция также может иметь внутреннюю связь, потому что использование этой функции любым способом через внешнюю связь (то есть между единицами перевода) будет вызывать неопределенное поведение (согласно параграфу 3), и что содержание встроенной функции во всех единицах перевода должно быть одинаковым.
Есть ли у этого правила обратная совместимость или особая причина для набора инструментов?