Share via


/Zc:static_assert (strikte verwerking van static_assert)

De optie /Zc:static_assert compiler vertelt de compiler om static_assert aanroepen te evalueren met niet-afhankelijke testexpressies wanneer klasse- of functiesjablonen worden geparseerd.

Syntaxis

/Zc:static_assert
/Zc:static_assert-

Opmerkingen

Vanaf Visual Studio 17.10 hebben /Zc:static_assert en /Zc:static_assert- geen effect. Beide opties worden genegeerd om te voorkomen dat builds fouten veroorzaken die ze gebruiken. static_assert wordt nu nooit geëvalueerd bij het parseren van klasse- of functiesjablonen.

De optie /Zc:static_assert compiler vertelt de compiler een static_assert te evalueren in de hoofdtekst van een functiesjabloon of in de hoofdtekst van een klassesjabloonlidfunctie wanneer deze voor het eerst wordt geparseerd, als de testexpressie niet afhankelijk is. Als de niet-afhankelijke testexpressie falseis, verzendt de compiler onmiddellijk een fout. Wanneer de testexpressie afhankelijk is, wordt de static_assert pas geëvalueerd nadat de sjabloon is geïnstantieerd.

De optie /Zc:static_assert is beschikbaar vanaf Visual Studio 2022 versie 17.1. In eerdere versies van Visual Studio of als /Zc:static_assert- is opgegeven, voert Visual Studio geen afhankelijke analyse uit als de static_assert zich in de hoofdtekst van een functiesjabloon of in de hoofdtekst van een lidfunctie van een klassesjabloon bevindt. In plaats daarvan wordt alleen de static_assert geëvalueerd wanneer een sjabloon wordt geïnstantieerd.

Met de optie /permissive- kunt u /Zc:static_assertinschakelen, zodat deze standaard is ingeschakeld in projecten die gebruikmaken van /std:c++20 of /std:c++latest. De optie /Zc:static_assert- moet na een /std:c++20, /std:c++latestof /permissive- optie op de opdrachtregel komen.

Als de compiler zich in de standaardmodus C++14 bevindt en /permissive- of /Zc:static_assert is opgegeven, wordt /Zc:static_assert gedrag gebruikt. Als er echter een static_assert in een sjabloontekst wordt geëvalueerd, wordt ook standaardwaarschuwing C5254 gerapporteerd, 'taalfunctie 'terse static assert' vereist compilervlag '/std:c++17'', omdat dit gedrag pas is vereist als C++17.

Deze compileroptie instellen in Visual Studio

  1. Open het dialoogvenster eigenschappenpagina's van het project. Zie C++-compiler instellen en eigenschappen bouwen in Visual Studiovoor meer informatie.

  2. Selecteer de eigenschappenpagina configuratie-eigenschappen>C/C++>opdrachtregel.

  3. Voeg /Zc:static_assert of /Zc:static_assert- toe aan het deelvenster Aanvullende opties: deelvenster.

Zie ook

/Zc (conformance)