Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'identificator': ongeldig type voor niet-type sjabloonparameter 'parameter'
Opmerkingen
- Vóór C++20 kunt u een sjabloon met een structuur, klasse of samenvoegingsargument niet declareren. Aanwijzers kunnen worden gebruikt in plaats van deze typen als sjabloonparameters.
- Sinds C++20 kunnen structuren, klassen of unies worden gebruikt als niet-type sjabloonparameters. Een niet-type sjabloonparameter kan geen verwijzingstype voor rvalue of een parameterpakket met rvalue-typen zijn.
Voorbeelden
In het volgende voorbeeld wordt C2993 gegenereerd:
// compile with: /c and /std:c++17
template <int&& I> // C2993
struct S1 {};
template <int&&... Is> // C2993
struct S2 {};
Vóór MSVC 19.26 wordt de volgende code C2993 verzonden. Het verzendt nu 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 {};
Met C++17 en eerder kunt u geen sjabloonparameters van het type zwevendekomma hebben. Sinds C++20 zijn niet-type sjabloonparameters met drijvende-komma waarden toegestaan. Gebruik een functieargument om de sjabloonparameter van het drijvende komma niet-type door te geven aan functiesjablonen.
Vóór MSVC 19.26 wordt de volgende code C2993 verzonden. Het verzendt nu 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) {}