Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Ich kann hier keinen Fehler erkennen. Welches Problem hast du denn damit?Könnte mir jemand erklären was daran falsch ist, und wie man dieses Problem sonst lösen könnte?
Das Problem ist, das vector ein Template ist welches von dem Templateparameter T der Funktion abhängt. So kann nicht festgestellt werden ob "iterator" nun ein Typ oder ein Attribut/Methode bei der Instanzierung ist.Ich kann hier keinen Fehler erkennen. Welches Problem hast du denn damit?
template < typename T>
void abc()
{
typename std::vector<T>::iterator it;
}
Der Compiler von VS2008 scheint es irgendwie doch feststellen zu können, da er diesen Code auch ohne typename kompiliert. Etwas anderes hatte ich zum Zeitpunkt meines Beitrages gerade nicht zur Hand.Das Problem ist, das vector ein Template ist welches von dem Templateparameter T der Funktion abhängt. So kann nicht festgestellt werden ob "iterator" nun ein Typ oder ein Attribut/Methode bei der Instanzierung ist.
Bei der Instanzierung kann es jeder Compiler feststellen, aber dann sollte es eigentlich einen Fehler geben weil iterator ursprünglich nicht als Typ geparst wurde. Scheinbar arbeitet der VS Compiler mehr nach dem DWIM PrinzipDer Compiler von VS2008 scheint es irgendwie doch feststellen zu können, da er diesen Code auch ohne typename kompiliert.
Auch mit einer Instanzierung meckert VS nicht. Vielleicht erkennt der VS-Compiler, dass der Ausdruck unabhängig von der konkreten Wahl von T immer einen Typnamen ergibt. Gäbe es denn in diesem Fall eine Instanzierung, in der der Ausdruck keinen Typnamen ergibt?Bei der Instanzierung kann es jeder Compiler feststellen, aber dann sollte es eigentlich einen Fehler geben weil iterator ursprünglich nicht als Typ geparst wurde. Scheinbar arbeitet der VS Compiler mehr nach dem DWIM Prinzip![]()
Ja, ich hatte es auch ausprobiert.Auch mit einer Instanzierung meckert VS nicht.
Nein, in dem Fall wohl nicht, da es keine Spezialisierung von std::vector gibt wo iterator kein typedef ist.Vielleicht erkennt der VS-Compiler, dass der Ausdruck unabhängig von der konkreten Wahl von T immer einen Typnamen ergibt. Gäbe es denn in diesem Fall eine Instanzierung, in der der Ausdruck keinen Typnamen ergibt?
template <typename T>
struct A {
typedef int xt;
};
template <>
struct A<bool> {
static void xt(int i) {
//
}
};
template < typename T>
void abc()
{
typename A<T>::xt(5);
}
abc<int>();
abc<bool>();
Test.cpp: In function `void abc() [with T = int]':
Test.cpp:29: instantiated from here
Test.cpp:24: error: dependent-name ` A<T>::xt' is parsed as a non-type, but instantiation yields a type
Test.cpp:24: note: say `typename A<T>::xt' if a type is meant
Test.cpp: In function `void abc() [with T = bool]':
Test.cpp:30: instantiated from here
Test.cpp:24: error: no type named `xt' in `struct A<bool>'