¿Se puede declarar una función C ++ de modo que el valor de retorno no se pueda ignorar?

Estoy tratando de determinar si una función C ++ puede declararse de tal manera que el valor de retorno no pueda ignorarse (idealmente detectado en tiempo de compilación). Traté de declarar una clase con unprivate (o en C ++ 11,deletere)operator void() para tratar de atrapar la conversión implícita a vacío cuando un valor de retorno no se utiliza.

Aquí hay un programa de ejemplo:

class Unignorable {
    operator void();
};

Unignorable foo()
{
    return Unignorable();
}

int main()
{
    foo();
    return 0;
}

Desafortunadamente, mi compilador (clang-703.0.31) dice:

test.cpp:2:5: warning: conversion function converting 'Unignorable' to 'void' will never be used
    operator void();
    ^

y no genera ningún error o advertencia en la llamada afoo(). Entonces, eso no funcionará. Hay alguna otra manera de hacer esto? Las respuestas específicas a C ++ 11 o C ++ 14 o posterior estarían bien.

Respuestas a la pregunta(3)

Su respuesta a la pregunta