¿estático afirmar que el nombre de tipo de plantilla T NO está completo?

¿Hay alguna forma de static_assert de que un tipo T esNo completa en ese punto en un encabezado? La idea es tener un error de compilación si alguien agrega #incluye más adelante en lugares donde no deberían estar.

relacionado:¿Cómo escribir la plantilla `is_complete`?

Usando la respuesta de ese enlace,

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!");

desafortunadamente esto da un error de "uso no válido de tipo incompleto", por supuesto. ¿Hay alguna manera de afirmar sobre la negación?

Respuestas a la pregunta(2)

Su respuesta a la pregunta