Wie verzögere ich die Instanziierung eines statischen Datenelements in Visual C ++?

8

Der folgende Code funktioniert mit GCC und Clang, aber nicht mit Visual C ++:

%Vor%

Gemäß Abschnitt 14.7.1 des Standards:

  

... die Initialisierung (und alle damit verbundenen Nebenwirkungen) einer statischen   Datenelement tritt nicht auf, außer das statische Datenelement selbst ist   in einer Weise verwendet, die die Definition des statischen Datenelements erfordert   existieren

Es scheint also, dass dies ein Fehler in Visual C ++ ist; Es sollte diesen Code akzeptieren.

Trotzdem möchte ich das immer noch mit Visual C ++ machen können. Wie kann Visual C ++ am einfachsten funktionieren, ohne die Syntax für den Zugriff auf die Elementvariable zu ändern? Ich benötige auch, dass Type2<T>::it nicht existiert, wenn T::it nicht existiert, oder dass SFINAE sonst von der Existenz von Type2<T>::it entfernt werden kann.

Das ändert die Syntax, also will ich es nicht:

%Vor%

Das ist eine Menge Arbeit, weil meine Klasse mehr als eine einfache constexpr Variable enthalten wird:

%Vor%     
Justin 25.05.2017, 07:14
quelle

1 Antwort

2

Sie könnten it (wenn es existiert) erben, anstatt es direkt zu deklarieren:

%Vor%

Mit anderen Worten, nehmen Sie einfach das, was Sie bereits vorgeschlagen haben, und kombinieren Sie es mit einer anderen Indirektionsebene.

    
Angew 25.05.2017, 07:19
quelle