2015-12-09 2 views
2

В C++ 11 можно вызвать сбой static_assert, если объявлен тип. И заявляю, что я имею в виду, объявлено или полностью определено.static_assert, если тип объявлен

Цель состоит в том, чтобы скомпилировать с инструктивным сообщением, если что-то уже было или не было объявлено.

За исключением умного трюка, я полностью ожидаю, что будет задействован некоторый промежуточный шаблон типа type-traits, который еще не является частью стандарта.

+0

Ну, вы собираетесь объявить этот класс где-нибудь, не так ли? Если да, объявите #define вместе с ним, а затем используйте #ifdef вместе с #error. Кажется достаточно простым, даже если есть какая-то языковая акробатика, о которой я не могу сейчас думать ... –

+0

@chris: он хочет утверждать противоположное, что тип * не существует. –

+0

@ Cheersandhth.-Alf, справедливая точка. – chris

ответ

1

Если тип не существует в данной точке кода, вы не можете ссылаться на него. Чтобы обратиться к нему, вам придется объявить об этом. Но тогда вы не можете знать, к какой декларации относится любое использование. Единственная возможность эффективно утверждать, что она не существует, заключается в том, чтобы объявить или определить ее таким образом, чтобы она столкнулась с более ранним заявлением, например. например:

struct Type; // Earlier declaration. 

// Whatever, then: 
using Type = struct Unique_temporary_name*; // "Type" must not exist. 
Смежные вопросы