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