The replace type is needed to use the VolatileBool_Check macro instead of a template conversion function with "volatile bool" as argument. auto volatileBool = reinterpret_cast<QtQml_VolatileBoolObject *>(%PYARG_1); std::atomic<bool> *%out = volatileBool->flag;