Я знаю этот вопрос, в котором упоминается Boost "STATIC WARNING", но я хотел бы снова спросить, в частности, как я мог бы реализовать static_warning
, который работает аналогично static_assert
, но только генерирует предупреждение во время компиляции, а не прерывает ошибку компиляции.
Я хотел бы что-то подобное предложению Alexandrescu для статического утверждения в pre-С++ 11 дней, которое каким-то образом смогло напечатать некоторую полезную контекстуальную информацию как часть ошибки.
Было бы приемлемо потребовать, чтобы пользователь включил определенные стандартные предупреждения компилятора, чтобы эта конструкция работала (возможно, "неверное преобразование указателя" или "нарушает строгие правила псевдонимов" ) - любое предупреждение, которое должно быть частью нормального компиляция в любом случае может быть использована.
Короче говоря, я хочу, чтобы static_warning(false, "Hello world");
создавал предупреждение компилятора, которое должно каким-то образом включать строку "hello world" в предупреждающее сообщение. Возможно ли это, скажем, в GCC и MSVC, и как?
Я бы с радостью отдал небольшую награду за вознаграждение за любое особенно умное решение.
В качестве небольшого объяснения: у меня возникла идея подумать о этом вопросе: статическое предупреждение было бы полезным способом проследить процесс компиляции сложные специализированные шаблоны, которые в противном случае довольно сложно отлаживать. Статическое предупреждение можно использовать в качестве простого маяка для компилятора, чтобы испустить "Я сейчас компилирую эту часть кода".
Обновление. В идеале предупреждение будет запускаться в следующей настройке:
template <typename T> struct Foo
{
static_warning(std::is_pointer<T>::value, "Attempting to use pointer type.");
// ...
};
int main() { Foo<int> a; Foo<int*> b; }