Not all CPU instructions have a corresponding command in C++.
Many instructions don't correspond at all. The CPU instruction for NOP, for example, doesn't exist in C++. CPU instructions for binary coded decimal don't have a parallel in C++. Hardware IO instructions like IN and OUT don't exist in C++. Cache control instructions are found on most modern processors and would be a great addition, but doesn't exist in C++.
Thankfully the inline assembly wrapper and the ability to link to external modules written in assembly allow C++ code to use the instructions.
Sometimes a few of these instructions get added as compiler-specific extensions and intrinsics. The SIMD instructions are a great example. They often trail several years behind the introduction of the processors. In some ways that is good, since it can take several years before new processor functions get out to everyone.
Basically you just need to recognize that the languages are different, and some concepts available in one language are not present in another language.
The compiler and optimizer might take advantage of the instructions if it knows about them, but other times the CPU instructions can be completely unused by a compiler. Other times the compiler may make use of instructions in unexpected ways, since people who write compiler optimizers can find all kinds of tricky tricks, using alternate instructions that are faster ore more efficient than the direct route. As an example, you'll never see a good x86 compiler knowingly move a zero into a register, they'll use "xor rax, rax" rather than "mov rax, 0". So there's that too.
You specifically call out the parity flag and carry flag. Since these date back to antiquity the compiler writers know all about them, and have either found ways to exploit them for performance or ways to avoid them for performance. The ones you mentioned date back to the early 1990s, if there is a way to exploit them you can be certain the optimizer writers have explored them. Either way, used or not, they are well known.