std::string Vorwärtsdeklarieren



  • Blah,

    Wollte mal wissen, ob das hier so erlaubt ist.

    namespace std
    {
    	template <typename, typename, typename>
    	struct basic_string;
    
    	template <typename>
    	struct char_traits;
    
    	template <typename>
    	struct allocator;
    
    	typedef basic_string<char, char_traits<char>, allocator<char>> string;
    }
    

    Insbesondere das typedef ist IMO ein Problem, aber sicher bin ich mir nicht. Evtl andere Möglichkeiten?


  • Mod

    An sich scheint mir das zwar eine technisch richtige forward-Deklaration zu sein, jedoch:

    C++ Standard, 17.6.4.2.1 schrieb:

    The behavior of a C++ program is undefined if it adds declarations or definitions to namespace std or to a
    namespace within namespace std unless otherwise specified.

    Danach folgen noch mehr Klauseln, die dein Vorhaben noch genauer verbieten.

    Der GCC kennt eine stringfwd.h die zwar ziemlich genau macht, was du hier versuchst, aber die Implementierung selber darf das natürlich machen.

    Hast du wirklich ein Projekt, bei dem #include <string> für die Compilezeit relevant ist?



  • Blah,

    Die netten Begrüßungen waren wohl alle aus?



  • Hm, okay. Dass selbst Deklarationen verboten sind, wusste ich nicht. Auf einen Compiler-Spezifischen Header möchte ich nicht aufbauen. Ich wollte meinen Header eigentlich nur von dem restlichen Müll freihalten, der über <string> sonst noch so hereinkommt. Das C++ Buildsystem ist halt echt fucked up. (Eine gute, deutsche Übersetzung will mir gerade nicht einfallen. Im Arsch. Oder so.)


Anmelden zum Antworten