  We present qcor - a language extension to C++ and compiler implementation
that enables heterogeneous quantum-classical programming, compilation, and
execution in a single-source context. Our work provides a first-of-its-kind C++
compiler enabling high-level quantum kernel (function) expression in a
quantum-language agnostic manner, as well as a hardware-agnostic, retargetable
compiler workflow targeting a number of physical and virtual quantum computing
backends. qcor leverages novel Clang plugin interfaces and builds upon the XACC
system-level quantum programming framework to provide a state-of-the-art
integration mechanism for quantum-classical compilation that leverages the best
from the community at-large. qcor translates quantum kernels ultimately to the
XACC intermediate representation, and provides user-extensible hooks for
quantum compilation routines like circuit optimization, analysis, and
placement. This work details the overall architecture and compiler workflow for
qcor, and provides a number of illuminating programming examples demonstrating
its utility for near-term variational tasks, quantum algorithm expression, and
feed-forward error correction schemes.
