Sto tentando di identificare in fase di compilazione se una funzione viene mai chiamata. In particolare, voglio lanciare un fallimento asserzione statico se si tratta di:Come verificare in fase di compilazione se viene chiamata una funzione
template <typename T>
auto Function(T value) -> std::enable_if<someCondition, int>
{
// this is the function I want to call
}
template <typename... T>
int Function(T...)
{
// This function should never be called, instead I want
// a compile-time failure if this is called, because it
// means the above function wasn't successfully resolved.
}
Il motivo che voglio fare questo è perché il fallimento di chiamare correttamente Function()
con i risultati corrette condizioni in migliaia di righe di messaggi di errore del compilatore, nessuno di cui sono molto utili a chiunque non abbia familiarità con la base di codice.
Il motivo per cui non voglio mettere un static_assert
in Function
è perché abbiamo molte di queste funzioni, e abbiamo i mezzi, invece di generare le versioni Catch-all
tramite macro, che eviterebbe la crescita non necessaria del codice-base durante la produzione di messaggi di errore più utili.
Questo può essere fatto?
Non capisco dalla tua domanda perché non vuoi un 'static_assert'. Cerchi di spiegarlo, ma non capisco la tua spiegazione. Se le versioni catch-all sono generate da macro, perché un 'static_assert' non può essere generato da una macro? – hvd
@Arman il mio commento ha l'intenzione di mostrare che il tuo titolo è un falso. – 101010
@hvd no, perché la macro si trova in una posizione diversa e la 'Funzione' che desidero chiamare è * non * generata da una macro. Il motivo per cui voglio farlo in questo modo è perché la macro (che è da qualche altra parte) può ancora generare la funzione catch-all. – arman