Partielle Template-Spezialisierung



  • Okay, nehmen wir das noch einmal vor.
    Der C++-Code beschreibt die semantischen Forderungen des Standards an konforme Implementierungen in Bezug auf die Standardbibliothek (17.5.2.3/6 Satz 1).
    Der Standard schreibt nun vor, dass die Klassendefinitionen so übernommen werden müssen oder eine gleichwertige Implementierung verwendet werden muss (17.5.2.3/6 Satz 2). Gleichwertig im Sinne des Standards heißt, dass die Implementierung sich so verhalten muss, als ob sie so wie im Standard (also auch im C++-Code) angegeben implementiert wäre; das Verhalten des Programmes nach außen hin darf sich nicht ändern, wenn es im Sinne des Standards well-formed ist (1.9/1 Satz 4).
    Ist es nun well-formed, für Standardcontainer angepasste Template-Templateparameter zu verwenden? Ja, denn das Programm hält sich ja an die semantischen Forderungen des Standards (1.3.15), die hier als C++-Code gegeben sind, ansonsten müsste ja eine Regel explizit drin stehen, dass weitere Templateparameter erlaubt sind.
    Wenn sich aber das Verhalten eines Programmes, das well-formed ist, durch weitere Templateparameter ändern könnte, dann ist dies von der "as if"-Regel nicht abgedeckt. Folglich ist es nicht erlaubt, weitere Templateparameter hinzuzufügen.

    Ich denke, so oder so ähnlich wird der Gedankengang beim Kommittee bei der Begründung gewesen sein.
    Und nein, im nächsten Standard ist genau dies eben nicht klarer; steht ja schließlich schon über viele Ecken drin. Für die Erklärung hier habe ich schon einen C++0x-Entwurf vom Oktober 2008 genommen. 😉
    Allerdings stehen die Aussagen, auf denen meine Argumentation beruht, schon im alten C++-Standard.



  • Zu der Diskussion ist wahrscheinlich der letzte Absatz hiervon interessant, auch wenn leider keine Standard-Stelle angegeben wird.

    Felix

    Und natürlich hier nochmal von Herb Sutter.




Anmelden zum Antworten