Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
New in the C23 standard, the typeof_unqual
operator is a unary operator that returns the type of an expression after discarding qualifiers such as const
, volatile
, and restrict
. It can be used in type declarations, type casts, type checks, and so on. It gets the type of a variable, function, or any C expression.
The __typeof_unqual__
keyword is a Microsoft-specific extension that provides the same functionality as typeof_unqual
. The __typeof_unqual__
keyword differs from typeof_unqual
only in that it's available when compiling for all versions of C (not just /std:clatest
), and it may ease porting code between other compilers that support __typeof_unqual__
.
typeof_unqual
syntax
typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)
typeof_unqual
example
This example uses typeof_unqual()
, but the behavior is the same if you use __typeof_unqual__
.
// Compile with /std:clatest and /experimental:c11atomics
#include <stdatomic.h>
// A function that takes an atomic int pointer, but uses a non-atomic copy of the value
void func(_Atomic(int) * pAtomic)
{
typeof_unqual(*pAtomic) local = *pAtomic;
// Use local non-atomic copy of value
}
int main()
{
int* const cpVar1 = 2;
typeof_unqual(cpVar1) pVar2 = 3;
pVar2 = 4; // no error because pi is not const. cpVar1 = 4 would be an error.
_Atomic(int)i = 42;
func(&i);
return 0;
}
Requirements
Requires Visual Studio 17.9 or later, or cl.exe
version 19.39.33428 or later.
To use typeof_unqual
, compile with /std:clatest
.