nullptr_t

From cppreference.com
< c ‎ | types
Defined in header <stddef.h>
typedef typeof ( nullptr ) nullptr_t ;
(since C23)

nullptr_t is the type of the predefined null pointer constant, nullptr . It is a distinct type that is not itself a pointer type. It can be implicitly converted to any pointer type or bool , and the result is the null pointer value of that type or false respectively. No type other than nullptr_t itself can be converted or explicitly cast to nullptr_t .

sizeof ( nullptr_t ) and alignof ( nullptr_t ) are equal to sizeof ( void * ) and alignof ( void * ) respectively.

nullptr_t has only one valid value, i.e., nullptr . The object representation of nullptr is same as that of ( void * ) 0 . If an lvalue conversion produces a nullptr_t value with a different object representation, the behavior is undefined.

Example

Demonstrate that nullptr_t is a distinct type.

#include <stddef.h>
#include <stdio.h>
 
#define DETECT_NULL_POINTER_CONSTANT(e) \
    _Generic(e,                         \
        void* : puts("void*"),          \
        nullptr_t : puts("nullptr_t"),  \
        default : puts("other")         \
    )
 
int main()
{
    DETECT_NULL_POINTER_CONSTANT(((void*)0));
    DETECT_NULL_POINTER_CONSTANT(0);
    DETECT_NULL_POINTER_CONSTANT(nullptr);
}

Output:

void*
other
nullptr_t

References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.21.2 The nullptr_t type (p: 315-316)

See also

implementation-defined null pointer constant
(macro constant)
C++ documentation for nullptr_t