estática afirma que o nome do tipo de modelo T NÃO está completo?
Existe uma maneira de static_assert que um tipo T éNão concluir nesse ponto em um cabeçalho? A idéia é ter um erro de compilação se alguém adicionar #includes no caminho em lugares que não deveriam estar.
relacionados:Como escrever o modelo `is_complete`?
Usando a resposta desse link,
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!");
infelizmente, isso gera o erro "uso inválido do tipo incomleto", oh. Existe uma maneira de afirmar a negação?