Compilación fallida si el valor de retorno no se utiliza para un determinado tipo

Me gustaría hacer que la compilación falle para alguna llamada de función pero no para otras. La llamada a la función que quiero que falle son aquellas que no manejan valores de retorno cuando el valor es de un tipo determinado. En el siguiente ejemplo, no se maneja una función que regresaError es un error de compilación, pero no manejar una función que devuelva cualquier otra cosa debería tener éxito.

Nota: nuestro entorno de ejecución (integrado) no nos permite utilizar las siguientes construcciones: RTTI, excepciones.

Este código solo necesita compilar con Clang, preferiría no tener que anotar cada función.

Preferimos una solución que falla en tiempo de compilación en lugar de en tiempo de ejecución.

enum class Error {
  INVAL,
  NOERR,
};

// do something that can fail.
Error DoThing();
// may return different return codes, we never care (we can't change prototype)
int DoIgnoredThing();

int main() {
  DoThing(); // compilation failure here, unused "Error" result
  DoIgnoredThing(); // compilation succeeds, OK to ignore unused "int" result
  return 0;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta