Я хочу, чтобы некоторые функции не вызывались. Давайте проигнорируем случай вызова функции с помощью указателя на функцию или что-то еще, и просто сосредоточимся на случае прямого вызова функции. Я могу сделать это с = delete
. Однако диагностика не является достаточно информативной. Я рассмотрел использование static_assert
, с помощью которого вы можете предоставить собственное диагностическое сообщение. Я разместил оператор static_assert(false, ...)
внутри тела функции, надеясь, что он срабатывает при вызове функции. Однако оказывается, что static_assert
не работает, даже если функция не вызывается. Какие-либо предложения?Forbids функции с `static_assert`
Дополнительная информация: Функция запрещена безоговорочно. Таким образом, std::enable_if
здесь не применяется. Мотивация для такой функции заключается в том, что я хочу предотвратить определенное использование, которое в противном случае скомпилировалось бы с разрешением перегрузки. Поэтому я не могу просто удалить функцию. deprecated
не то, что я хочу. Я хочу ошибку компиляции, а не предупреждение.
Используйте '= delete'. Вот для чего это. –
['static_assert'] (http://en.cppreference.com/w/cpp/language/static_assert) не может остановить функцию от вызова, это цель для утверждений времени компиляции, которая дает ошибки. Вы можете посмотреть, например, ['std :: enable_if'] (http://en.cppreference.com/w/cpp/types/enable_if). –
Почему функция существует, когда она не предназначена для вызова? Просто удалите его из своей кодовой базы. – cdonat