Я хочу создать собственное предупреждение во время компиляции, а не в препроцессоре (как я видел несколько ответов)
Допустим, у нас есть:
class A
{
private:
explicit A(A const& other);
};
теперь, если пользователь делает:
A first;
а потом:
A second(first);
он получит сообщение об ошибке, что созданная копия не реализована или что-то в этом роде … имея в виду, что в моем коде много наследников … а также ссылаясь на файл H, который реализован в A, а не там, где я пытался использовать конструктор копирования …
так что вместо предупреждения компилятора по умолчанию я бы хотел создать свой собственный ….
что-то вроде .. «Вы не можете использовать конструктор копирования»
Помогите?
Спасибо!
Используя 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
Обратите внимание, что это приведет к ошибке, а не к предупреждению. Однако почти всегда лучше всего использовать опцию компилятора «Предупреждения как ошибки» и для простоты (т.е. задокументировано с комментарием) отключить предупреждения, которые, как вы знаете, безвредны.
Без препроцессора, использующего только стандартный C ++, это нереально. Ты можешь использовать static_assert
, но это не предупреждение.