статические утверждают, что шаблон typename T НЕ завершен?
Есть ли способ static_assert, что тип TНе завершить в этот момент в заголовке? Идея состоит в том, чтобы иметь ошибку компиляции, если кто-то добавляет #include в будущем в тех местах, где он не должен быть.
связанные с:Как написать шаблон `is_complete`?
Используя ответ этой ссылки,
namespace
{
template<class T, int discriminator>
struct is_complete {
static T & getT();
static char (& pass(T))[2];
static char pass(...);
static const bool value = sizeof(pass(getT()))==2;
};
}
#define IS_COMPLETE(X) is_complete<X,__COUNTER__>::value
class GType;
static_assert(!IS_COMPLETE(GType),"no cheating!");
к сожалению, это приводит к ошибке "недопустимое использование типа не завершено", черт возьми. Есть ли способ заявить об отрицании?