Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
'Identifier' : ungültiger Typ für den Parameter 'parameter' des Typs 'nicht typ'
Bemerkungen
- Vor C++20 können Sie keine Vorlage mit einem Struktur-, Klassen- oder Union-Argument deklarieren. Zeiger können anstelle dieser Typen als Vorlagenparameter verwendet werden.
- Da C++20, Struktur, Klasse oder Vereinigungen als Vorlagenparameter ohne Typ verwendet werden können . Ein Nicht-Typ-Vorlagenparameter kann kein Rvalue-Verweistyp oder ein Parameterpaket von Rvalue-Typen sein.
Examples
Im folgenden Beispiel wird C2993 generiert:
// compile with: /c and /std:c++17
template <int&& I> // C2993
struct S1 {};
template <int&&... Is> // C2993
struct S2 {};
Vor MSVC 19.26 wurde der folgende Code C2993 ausgegeben. Es emittiert jetzt C7582:
// compile with: /c /std:c++17
struct MyStruct {};
template <class T, MyStruct S> // Was C2993 prior to MSVC 19.26. Now emits C7582.
class MyClass1 {};
template <class T, MyStruct* S> // OK
class MyClass2 {};
Bei C++17 und früheren Versionen können Sie keine Gleitkommavorlagenparameter ohne Typ aufweisen. Seit C++20 sind gleitkommafreie Vorlagenparameter zulässig. Verwenden Sie ein Funktionsargument, um den Gleitkommaparameter ohne Typvorlage an Funktionsvorlagen zu übergeben.
Vor MSVC 19.26 wurde der folgende Code C2993 ausgegeben. Es emittiert jetzt C7582:
// C2993b.cpp
// compile with: /c /std:c++17
template<class T, float F> // Was C2993 prior to MSVC 19.26. Now emits C7592
void func1(T t) {}
template<class T> // OK
void func2(T t, float F) {}