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