Visual Studio 2010 — C ++, как создать собственное предупреждение во время компиляции

Я хочу создать собственное предупреждение во время компиляции, а не в препроцессоре (как я видел несколько ответов)
Допустим, у нас есть:

class A
{
private:
explicit A(A const& other);
};

теперь, если пользователь делает:

A first;

а потом:

A second(first);

он получит сообщение об ошибке, что созданная копия не реализована или что-то в этом роде … имея в виду, что в моем коде много наследников … а также ссылаясь на файл H, который реализован в A, а не там, где я пытался использовать конструктор копирования …

так что вместо предупреждения компилятора по умолчанию я бы хотел создать свой собственный ….
что-то вроде .. «Вы не можете использовать конструктор копирования»

Помогите?
Спасибо!

4

Решение

Используя static_assert с определенным пользователем сообщением вызовет это сообщение об ошибке во время компиляции

class A
{
private:
A() {}

explicit A(A const& /* other */)
{
static_assert(false, "You cannot use copy constructor");
}
};

int main()
{
A first;
A second(first); // compile error
}

Выход на LiveWorkSpace

Обратите внимание, что это приведет к ошибке, а не к предупреждению. Однако почти всегда лучше всего использовать опцию компилятора «Предупреждения как ошибки» и для простоты (т.е. задокументировано с комментарием) отключить предупреждения, которые, как вы знаете, безвредны.

2

Другие решения

Без препроцессора, использующего только стандартный C ++, это нереально. Ты можешь использовать static_assert, но это не предупреждение.

1

По вопросам рекламы [email protected]