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:
Tags und Links c++ visual-c++ c++14 template-meta-programming compatibility