<分区>
有没有办法 static_assert 类型 T 在 header 中的那个点不完整?这个想法是,如果有人在不应该的地方添加#includes,就会出现编译错误。
相关:How to write `is_complete` template?
使用该链接的答案,
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!");
不幸的是,这给出了“无效使用不完整类型”的错误,d'oh。有没有办法断言否定?