JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.

If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.

If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.

CodeSonar® 9.2p0 CONFIDENTIAL CodeSecure Inc
C and C++

C++ Support

This section describes the current state of CodeSonar support for the various C++ standards, summarized in the following table.

C++ Standard CodeSonar Support Status
C++98 ISO/IEC 14882:1998 all features supported
C++11 (C++0x) ISO/IEC 14882:2011 all features supported
C++14 (C++1y) ISO/IEC 14882:2014 all features supported
C++17 (C++1z) ISO/IEC 14882:2017 all features supported
C++20 ISO/IEC 14882:2020 most features supported
C++23 - some features supported
C++26 - no features supported


All features supported: C++98, C++11 (C++0x), C++14, C++17

CodeSonar parses and generates internal representation for all features from these standards.

C++98 ISO/IEC 14882:1998
C++11 (C++0x) ISO/IEC 14882:2011
C++14 ISO/IEC 14882:2014
C++17 ISO/IEC 14882:2017

C++20

CodeSonar supports most features from C++20, as shown in the following table.

Parsed and internal representation (IR) generated
  __VA_OPT__ P0306R4, P1042R1
  Designated initializers P0329R4
  Permit conversions to arrays of unknown bound P0388R4
  Allow lambda capture [=, this] P0409R2
  Familiar template syntax for generic lambdas P0428R2
  [[likely]] and [[unlikely]] attributes P0479R5
  char8_t: A type for UTF-8 characters and strings P0482R6
  Spaceship P0515R3, P0905R1, P1120R0, P1185R2, P1186R3, P1630R1, P1959R0, P20002R1, P2085R0
  Simplifying implicit lambda capture P0588R1
  std::is_constant_evaluated() P0595R2
  Range-based for statements with initializer P0614R1
  Default constructible and assignable stateless lambdas P0624R2
  Make "typename" more optional P0634R3
  const mismatch with defaulted copy constructor (core issue 1331) P0641R2
  Coroutines P0664R8, P0912R5, P2107R0
  Default member initializers for bit-fields P0683R1
  Access Checking on Specializations P0692R1
  Constructor Template Argument Deduction P0702R1
  Fixing const qualified-pointers-to-members. P0704R1
  Efficient sized delete for variable sized classes P0722R3
  Non-Type Template Parameters P0732R2, P1907R1
  Concepts: all except those associated with P2103R0 and P2113R0 P0734R0, P0857R0, P1084R2, P1141R2, P1452R2, P1616R1, P1972R0, P1980R0, P2092R0,
  Deprecate POD P0767R1
  Lambda init-capture P0780R2, P2095R0
  More constexpr containers P0784R7
  Deprecate implicit capture of this via [=] P0806R2
  Language support for empty objects P0840R2
  ADL and Function Templates that are not visible P0846R0
  Conditionally Trivial Special Member Functions P0848R3
  explicit(bool) P0892R2
  Checking for abstract class types P0929R2
  Integrating feature-test macros into the C++ WD P0941R2
  Allow initializing aggregates from a parenthesized list of values P0960R3
  Relaxing structured bindings customization point P0961R1
  Relaxing the range-for loop customization point finding rules P0962R1
  Allow structured bindings to accessible members P0969R0
  try-catch blocks in constexpr functions P1002R1
  Prohibit aggregates with user-declared constructors P1008R1
  Array size deduction in new-expressions P1009R2
  Allowing Virtual Function Calls in Constant Expressions P1064R0
  Immediate functions P1073R3
  Extending structured bindings to be more like variable declarations P1091R3
  Nested inline namespaces P1094R2
  Using Enum P1099R5
  Adding the constinit keyword P1143R2
  Deprecating volatile P1152R4
  Deprecate uses of the comma operator in subscripting expressions P1161R3
  Adopt source_location for C++20 P1208R6
  Core Issue 1778: exception-specification in explicitly-defaulted functions P1286R2
  [[nodiscard("should have a reason")]] P1301R4
  Allowing dynamic_cast and polymorphic typeid in constant expressions P1327R1
  Changing an active union member in constant expressions P1330R0
  Permitting trivial default initialization in constexpr contexts P1331R2
  Missing Feature Test Macros P1353R0
  Reference capture of structured bindings. P1381R1
  Enabling constexpr intrinsics by permitting unevaluated inline-assembly in constexpr functions P1668R1
  [[nodiscard]] for constructors P1771R1
  Wording for Class Template Argument Deduction for Alias Templates P1814R0
  Implicit move for more local objects and rvalue references P1825R0
  Fixing inconsistencies between constexpr and consteval functions P1937R2
  Allow defaulting comparisons by value P1946R0
  Converting from T* to bool should be considered narrowing P1957R2
  Fixing the wording of parenthesized aggregate-initialization P1975R0
  Modules: Disallow "export import foo" outside of module interface P2109R0
Not yet supported
  Wording for lambdas in unevaluated contexts P0315R4
  When are constexpr member functions defined? (core issue 1581) P0859R0
  Modules P1103R3, P1703R1, P1766R1, P1779R3, P1811R0, P1815R2, P1857R3, P1874R1, P1979R0, P2115R0
  Alternative Wording for P0907R4 Signed Integers are Two's Complement P1236R1
  CTAD P1816R0, P2082R1
  Reserving Attribute Namespaces for Future Use P1908R1
  Concepts:
  • Parameter mapping for non-dependent entities (CA107) & Comparing types and type-constraints (US117)
  • CA 104 Clarify declaration matching and partial ordering requiring substitution into constraints
  • US115 Hidden non-template friends need a requires-clause
P2103R0
  Concepts: Disallow changing concept values P2104R0
  Concepts:
  • Partial ordering of rewritten operator candidates resulting from constrained templates
P2113R0

C++23

CodeSonar supports many features from C++23, as shown in the following table.

Parsed and internal representation (IR) generated
Literal Suffix for (signed) size_t P0330R8
Deducing this P0847R7
Make () more optional for lambdas (Down with ()!) P1102R2
if consteval P1938R3
Non-literal variables (and labels and gotos) in constexpr functions P2242R3
auto(x) and auto {x} P0849R8
Extended floating-point types and standard names P1467R9
DR: C++ Identifier Syntax using Unicode Standard Annex 31 P1949R7
DR: Allow Duplicate Attributes P2156R1
Attributes on lambda expression P2173R1
Labels at the end of compound statements (C compatibility) P2324R2
Add support for preprocessing directives elifdef and elifndef P2334R1
Support for #warning P2437R1
Missing feature test macros for C++20 core papers P2493R0
Not yet supported
Removing Garbage Collection Support P2186R2
Character encoding of diagnostic text P2246R1
Consistent character literal encoding P2316R2
static operator() P1169R4
Narrowing contextual conversions to bool P1401R5
Portable assumptions [[assume]] P1774R8
Declarations and where to find them P1787R5
Make declaration order layout mandated P1847R4
Proposed resolution for core issues 411, 1656, and 2333; numeric and universal character escapes in character and string literals P2029R4
Change scope of lambda trailing-return-type P2036R3
Named universal character escapes P2071R2
Generalized wording for partial specializations P2096R2
Multidimensional subscript operator P2128R6
Mixed string literal concatenation P2201R1
Trimming whitespaces before line splicing P2223R2
Simpler implicit move P2266R3
DR: Using unknown pointers and references in constant expressions P2280R4
Delimited escape sequences P2290R3
Support for UTF-8 as a portable source file encoding P2295R6
Character sets and encodings P2314R4
DR: De-deprecating volatile bitwise compound assignment operations P2327R1
Extend init-statement to allow alias-declaration P2360R0
Remove non-encodable wide character literals and multicharacter wide character literals P2362R3
Relaxing some constexpr restrictions P2448R2
DR: Relax requirements on wchar_t to match existing practices P2460R2
DR: The Equality Operator You Are Looking For P2468R2
DR: char8_t Compatibility and Portability Fix P2513R4
DR: consteval needs to propagate up P2564R3
Wording for class template argument deduction from inherited constructors P2582R1
static operator[] P2589R1
DR: Meaningful exports P2615R0
Responses to NB comments on DTS 12907 "Extensions to C++ for Transactional Memory Version 2" P2617R0
Permitting static constexpr variables in constexpr functions P2647R1
Extending the lifetime of temporaries in range-based for loop initializer P2718R0
Proposed resolution for CWG2692 Static and explicit object member functions with the same parameter-type-lists P2797R0

C++26

CodeSonar does not yet support C++26 features.

Not yet supported
Unevaluated strings P2361R6
Add @, $, and ` to the basic character set P2558R2
constexpr cast from void*: towards constexpr type-erasure P2738R1
User-generated static_assert messages P2741R3
A nice placeholder with no name P2169R4
DR: On the ignorability of standard attributes P2552R3
DR: Static storage for braced initializers P2752R3
Pack Indexing P2662R3
DR: Template parameter initialization P2308R1
Remove Deprecated Arithmetic Conversion on Enumerations From C++26 P2864R2
Disallow Binding a Returned Glvalue to a Temporary P2748R5
DR: Clarifying rules for brace elision in aggregate initialization P3106R1
Attributes for Structured Bindings P0609R3
DR: Module Declarations Shouldn’t be Macros P3034R1
DR: Trivial infinite loops are not Undefined Behavior P2809R3
Erroneous behaviour for uninitialized reads P2795R5
= delete("should have a reason"); P2573R2
Variadic friends P2893R3
 

To report problems with this documentation, please visit https://support.codesecure.com/.