C++ Core Guidelines Checker Reference

This section lists C++ Core Guidelines Checker warnings. For information about Code Analysis, see /analyze (Code Analysis) and Quick Start: Code Analysis for C/C++.

Note

Some warnings belong to more than one group, and not all warnings have a complete reference topic.

OWNER_POINTER Group

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT Return a scoped object instead of a heap-allocated if it has a move constructor. See C++ Core Guidelines R.3.

C26403 RESET_OR_DELETE_OWNER Reset or explicitly delete an owner<T> pointer '%variable%'. See C++ Core Guidelines R.3.

C26404 DONT_DELETE_INVALID Do not delete an owner<T> that may be in invalid state. See C++ Core Guidelines R.3.

C26405 DONT_ASSIGN_TO_VALID Do not assign to an owner<T> that may be in valid state. See C++ Core Guidelines R.3.

C26406 DONT_ASSIGN_RAW_TO_OWNER Do not assign a raw pointer to an owner<T>. See C++ Core Guidelines R.3.

C26407 DONT_HEAP_ALLOCATE_UNNECESSARILY Prefer scoped objects, don't heap-allocate unnecessarily. See C++ Core Guidelines R.5.

C26429 USE_NOTNULL Symbol '%symbol%' is never tested for nullness, it can be marked as not_null. See C++ Core Guidelines F.23.

C26430 TEST_ON_ALL_PATHS Symbol '%symbol%' is not tested for nullness on all paths. See C++ Core Guidelines F.23.

C26431 DONT_TEST_NOTNULL The type of expression '%expr%' is already gsl::not_null. Do not test it for nullness. See C++ Core Guidelines F.23.

RAW_POINTER Group

C26400 NO_RAW_POINTER_ASSIGNMENT Do not assign the result of an allocation or a function call with an owner<T> return value to a raw pointer; use owner<T> instead. See C++ Core Guidelines I.11.

C26401 DONT_DELETE_NON_OWNER Do not delete a raw pointer that is not an owner<T>. See C++ Core Guidelines I.11.

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT  Return a scoped object instead of a heap-allocated if it has a move constructor. See C++ Core Guidelines R.3.

C26408 NO_MALLOC_FREE Avoid malloc() and free(), prefer the nothrow version of new with delete. See C++ Core Guidelines R.10.

C26409 NO_NEW_DELETE Avoid calling new and delete explicitly, use std::make_unique<T> instead. See C++ Core Guidelines R.11.

C26429 USE_NOTNULL Symbol '%symbol%' is never tested for nullness, it can be marked as not_null. See C++ Core Guidelines F.23.

C26430 TEST_ON_ALL_PATHS Symbol '%symbol%' is not tested for nullness on all paths. See C++ Core Guidelines F.23.

C26431 DONT_TEST_NOTNULL The type of expression '%expr%' is already gsl::not_null. Do not test it for nullness. See C++ Core Guidelines F.23.

C26481 NO_POINTER_ARITHMETIC Don't use pointer arithmetic. Use span instead. See C++ Core Guidelines Bounds.1.

C26485 NO_ARRAY_TO_POINTER_DECAY. Expression '%expr%': No array to pointer decay. See C++ Core Guidelines Bounds.3.

UNIQUE_POINTER Group

C26410 NO_REF_TO_CONST_UNIQUE_PTR The parameter '%parameter%' is a reference to const unique pointer, use const T* or const T& instead. See C++ Core Guidelines R.32.

C26411 NO_REF_TO_UNIQUE_PTR The parameter '%parameter%' is a reference to unique pointer and it is never reassigned or reset, use T* or T& instead. See C++ Core Guidelines R.33.

C26414 RESET_LOCAL_SMART_PTR Move, copy, reassign, or reset a local smart pointer '%symbol%'. See C++ Core Guidelines R.5.

C26415 SMART_PTR_NOT_NEEDED Smart pointer parameter '%symbol%' is used only to access contained pointer. Use T* or T& instead. See C++ Core Guidelines R.30.

SHARED_POINTER Group

C26414 RESET_LOCAL_SMART_PTR Move, copy, reassign, or reset a local smart pointer '%symbol%'. See C++ Core Guidelines R.5.

C26415 SMART_PTR_NOT_NEEDED Smart pointer parameter '%symbol%' is used only to access contained pointer. Use T* or T& instead. See C++ Core Guidelines R.30.

C26416 NO_RVALUE_REF_SHARED_PTR Shared pointer parameter '%symbol%' is passed by rvalue reference. Pass by value instead. See C++ Core Guidelines R.34.

C26417 NO_LVALUE_REF_SHARED_PTR Shared pointer parameter '%symbol%' is passed by reference and not reset or reassigned. Use T* or T& instead. See C++ Core Guidelines R.35.

C26418 NO_VALUE_OR_CONST_REF_SHARED_PTR Shared pointer parameter '%symbol%' is not copied or moved. Use T* or T& instead. See C++ Core Guidelines R.36.

DECLARATION Group

C26426 NO_GLOBAL_INIT_CALLS Global initializer calls a non-constexpr function '%symbol%'. See C++ Core Guidelines I.22.

C26427 NO_GLOBAL_INIT_EXTERNS Global initializer accesses extern object '%symbol%'. See C++ Core Guidelines I.22.

C26444 NO_UNNAMED_RAII_OBJECTS Avoid unnamed objects with custom construction and destruction. See ES.84: Don't (try to) declare a local variable with no name.

CLASS Group

C26432 DEFINE_OR_DELETE_SPECIAL_OPS If you define or delete any default operation in the type '%symbol%', define or delete them all. See C++ Core Guidelines C.21.

C26433 OVERRIDE_EXPLICITLY Function '%symbol%' should be marked with 'override'. See C.128: Virtual functions should specify exactly one of virtual, override, or final.

C26434 DONT_HIDE_METHODS Function '%symbol_1%' hides a non-virtual function '%symbol_2%'. See C++ Core Guidelines C.128.

C26435 SINGLE_VIRTUAL_SPECIFICATION Function '%symbol%' should specify exactly one of 'virtual', 'override', or 'final'. See C.128: Virtual functions should specify exactly one of virtual, override, or final.

C26436 NEED_VIRTUAL_DTOR The type '%symbol%' with a virtual function needs either public virtual or protected nonvirtual destructor. See C++ Core Guidelines C.35.

C26443 NO_EXPLICIT_DTOR_OVERRIDE Overriding destructor should not use explicit 'override' or 'virtual' specifiers. See C.128: Virtual functions should specify exactly one of virtual, override, or final.

TYPE Group

C26437 DONT_SLICE Do not slice. See C++ Core Guidelines ES.63.

STYLE Group

C26438 NO_GOTO Avoid goto. See C++ Core Guidelines ES.76.

FUNCTION Group

C26439 SPECIAL_NOEXCEPT This kind of function may not throw. Declare it noexcept. See C++ Core Guidelines F.6.

C26440 DECLARE_NOEXCEPT Function '%symbol%' can be declared noexcept. See C++ Core Guidelines F.6.

C26447 DONT_THROW_IN_NOEXCEPT The function is declared noexcept but calls a function which may throw exceptions. See C++ Core Guidelines: F.6: If your function may not throw, declare it noexcept.

CONCURRENCY Group

C26441 NO_UNNAMED_GUARDS Guard objects must be named. See C++ Core Guidelines cp.44.

CONST Group

C26460 USE_CONST_REFERENCE_ARGUMENTS The reference argument '%argument%' for function '%function%' can be marked as const. See C++ Core Guidelines con.3.

C26461 USE_CONST_POINTER_ARGUMENTS: The pointer argument '%argument%' for function '%function%' can be marked as a pointer to const. See C++ Core Guidelines con.3.

C26462 USE_CONST_POINTER_FOR_VARIABLE The value pointed to by '%variable%' is assigned only once, mark it as a pointer to const. See C++ Core Guidelines con.4.

C26463 USE_CONST_FOR_ELEMENTS The elements of array '%array%' are assigned only once, mark elements const. See C++ Core Guidelines con.4.

C26464 USE_CONST_POINTER_FOR_ELEMENTS The values pointed to by elements of array '%array%' are assigned only once, mark elements as pointer to const. See C++ Core Guidelines con.4.

C26496 USE_CONST_FOR_VARIABLE The variable '%variable%' is assigned only once, mark it as const. See C++ Core Guidelines con.4.

C26497 USE_CONSTEXPR_FOR_FUNCTION This function %function% could be marked constexpr if compile-time evaluation is desired. See C++ Core Guidelines F.4.

C26498 USE_CONSTEXPR_FOR_FUNCTIONCALL This function call %function% can use constexpr if compile-time evaluation is desired. See C++ Core Guidelines con.5.

TYPE Group

C26465 NO_CONST_CAST_UNNECESSARY Don't use const_cast to cast away const. const_cast is not required; constness or volatility is not being removed by this conversion. See C++ Core Guidelines Type.3.

C26466 NO_STATIC_DOWNCAST_POLYMORPHIC Don't use static_cast downcasts. A cast from a polymorphic type should use dynamic_cast. See C++ Core Guidelines Type.2.

C26471 NO_REINTERPRET_CAST_FROM_VOID_PTR Don't use reinterpret_cast. A cast from void* can use static_cast. See C++ Core Guidelines Type.1.

C26472 NO_CASTS_FOR_ARITHMETIC_CONVERSION Don't use a static_cast for arithmetic conversions. Use brace initialization, gsl::narrow_cast, or gsl::narow. See C++ Core Guidelines Type.1.

C26473 NO_IDENTITY_CAST Don't cast between pointer types where the source type and the target type are the same. See C++ Core Guidelines Type.1.

C26474 NO_IMPLICIT_CAST Don't cast between pointer types when the conversion could be implicit. See C++ Core Guidelines Type.1.

C26475 NO_FUNCTION_STYLE_CASTS Do not use function style C-casts. See C++ Core Guidelines ES.49.

C26490 NO_REINTERPRET_CAST Don't use reinterpret_cast. See C++ Core Guidelines Type.1.

C26491 NO_STATIC_DOWNCAST Don't use static_cast downcasts. See C++ Core Guidelines Type.2.

C26492 NO_CONST_CAST Don't use const_cast to cast away const. See C++ Core Guidelines Type.3.

C26493 NO_CSTYLE_CAST Don't use C-style casts. See C++ Core Guidelines Type.4.

C26494 VAR_USE_BEFORE_INIT Variable '%variable%' is uninitialized. Always initialize an object. See C++ Core Guidelines Type.5.

C26495 MEMBER_UNINIT Variable '%variable%' is uninitialized. Always initialize a member variable. See C++ Core Guidelines Type.6.

BOUNDS Group

C26446 USE_GSL_AT Prefer to use gsl::at() instead of unchecked subscript operator. See C++ Core Guidelines: Bounds.4: Don't use standard-library functions and types that are not bounds-checked.

C26481 NO_POINTER_ARITHMETIC. Don't use pointer arithmetic. Use span instead. See C++ Core Guidelines Bounds.1

C26482 NO_DYNAMIC_ARRAY_INDEXING Only index into arrays using constant expressions. See C++ Core Guidelines Bounds.2

C26483 STATIC_INDEX_OUT_OF_RANGE Value %value% is outside the bounds (0, %bound%) of variable '%variable%'. Only index into arrays using constant expressions that are within bounds of the array. See C++ Core Guidelines Bounds.2

C26485 NO_ARRAY_TO_POINTER_DECAY Expression '%expr%': No array to pointer decay. See C++ Core Guidelines Bounds.3

GSL Group

C26445 NO_SPAN_REF A reference to gsl::span or std::string_view may be an indication of a lifetime issue. See C++ Core Guidelines GSL.view: Views

C26446 USE_GSL_AT Prefer to use gsl::at() instead of unchecked subscript operator. See C++ Core Guidelines: Bounds.4: Don't use standard-library functions and types that are not bounds-checked.

C26448 USE_GSL_FINALLY Consider using gsl::finally if final action is intended. See C++ Core Guidelines: GSL.util: Utilities.

C26449 NO_SPAN_FROM_TEMPORARY gsl::span or std::string_view created from a temporary will be invalid when the temporary is invalidated. See C++ Core Guidelines: GSL.view: Views.

Deprecated Warnings

The following warnings are present in an early experimental rule set of the core guidelines checker, but are now deprecated and can be safely ignored. The warnings are superceded by warnings from the list above.

  • 26412 DEREF_INVALID_POINTER
  • 26413 DEREF_NULLPTR
  • 26420 ASSIGN_NONOWNER_TO_EXPLICIT_OWNER
  • 26421 ASSIGN_VALID_OWNER
  • 26422 VALID_OWNER_LEAVING_SCOPE
  • 26423 ALLOCATION_NOT_ASSIGNED_TO_OWNER
  • 26424 VALID_ALLOCATION_LEAVING_SCOPE
  • 26425 ASSIGNING_TO_STATIC
  • 26499 NO_LIFETIME_TRACKING

See Also

Using the C++ Core Guidelines Checkers