>> 1. Header only: Wir schieben den gesamten Code in Header Dateien und 
>> kompilieren REFLEX mit jeder Applikation. So machen es auch manch 
>> andere C++ Bibliotheken. Da könnten manche Abhängigkeiten allerdings 
>> erschweren.
> 
> Da zweifel ich ad-hoc an der technischen Realisierbarkeit. Ohne alles als
> Templates umzuschreiben, wo der Linker die Arbeit ab nimmt und die 
> doppelten Symbole wegkürzt, wie will man da alle Symbole, welche dann in 
> jedem Artefakt (cpp-Datei) auftauchen werden, behandeln. Meiner Erfahrung
> nach sollte der Linker an dieser Stelle das binden verweigern. Oder
> übersehe ich da jetzt was?

Foo.h ----->
class Foo
{
  void bar();
};

inline void Foo::bar()
{
//
}
<----- Foo.h

Wenn der Compiler sich entscheiden sollte, nicht zu inlinen, dann erzeugt er
ein Symbol mit "weak linkage" für Foo::bar in jeder Translation unit.
Mehrfache schwache Symbole werden dann beim Binden entfernt (). Ich gehe
davon aus, dass bei aktivierter LTO die Inline-Heuristik noch einmal
deutlich besser arbeitet.
Zikuläre Abhängigkeiten könnten das Vorhaben allerdings tatsächlich
unmöglich machen.

Antwort per Email an