Я пытаюсь определить во время компиляции, вызвана ли функция. В частности, я хочу сбросить статическое утверждение, если оно:
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.
}
Причина, по которой я хочу сделать это, состоит в том, что неудача для корректного вызова Function()
с правильными условиями приводит к тысячам строк сообщений об ошибках компилятора, ни одна из которых не очень помогает никому, кто не знаком с базой кода.
Причина, по которой я не хочу размещать static_assert
в Function
, состоит в том, что у нас есть много из этих функций, и вместо этого у нас есть средства для генерации версий Catch-all
с помощью макросов, что позволило бы избежать ненужного роста кодовой базы при создании более полезных сообщений об ошибках.
Можно ли это сделать?