statisch behaupten, dass der Vorlagentypname T NICHT vollständig ist?
Gibt es eine Möglichkeit, static_assert, dass ein Typ T @ isNich an dieser Stelle in einer Kopfzeile vervollständigen? Die Idee ist, einen Kompilierungsfehler zu haben, wenn jemand #includes die Straße hinunter an Stellen hinzufügt, an denen dies nicht der Fall sein sollte.
verbunden:Wie schreibe ich eine `is_complete` Vorlage?
Nutzen Sie die Antwort dieses Links,
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!");
Leider gibt dies "ungültige Verwendung des unvollständigen Typs" Fehler, d'oh. Gibt es eine Möglichkeit, die Negation durchzusetzen?