B
Nur das beobachtbare Verhalten eines Programms ist verbindlich. Optimierungen gehören nicht dazu (Ausnahme sind solche Dinge wie Return-Value Optimization, die beoachtbar sind, und deshalb eigentlich nicht unter Optimierungen im eigentlichen Sinne fallen). Es bleibt also für 'inline' nur die Auswirkung auf die One-Definition-Rule.
Mit einem traditionellen Übersetzungsmodell (d.h. der Compiler erzeugt verschiebbaren Maschinencode in Objektdateien, der Linker bindet diese zu einem ausführbaren Programm zusammen) ist eine Funktion, die in einer anderen Übersetzungseinheit definiert wurde, für den Compiler nicht sichtbar, kann also nicht geinlinet werden. 'inline' ermöglicht es, die Funktion in einem Header zu definieren, so dass sie in jeder ÜE, die sie aufruft, sichtbar ist, und also geinlinet werden kann. Hat man aber ein Übersetzungsmodell, in dem die Aufgaben von Compiler und Linker flexibler verteilt oder verschränkt sind (=> Link-time code generation, Whole program optimization), wird sowas wieder möglich.
Shade, inline-Funktionen haben nicht automatisch internal linkage. Wo hast du das denn her?