我很好奇是否有可能编写这样的C ++模板,因为它不可能创建一个它将接受的类/类型(编译没有错误)。 如果有可能,它可能是什么?
答案 0 :(得分:2)
不确定。例如:
template <typename T>
struct S {
static_assert(std::is_class<T>::value, "T must be a class");
static_assert(!std::is_class<T>::value, "T must not be a class");
};
但是,这样的模板是自动格式错误的NDR。
如果没有有效的专业化可以 为模板生成,并且该模板未实例化,模板格式错误,无法诊断 必需的。
([temp.res] / 8)
答案 1 :(得分:1)
您可以这样做的一种方法是仅提供类模板的前向声明。我过去使用的这种类模板的一个例子是将类型的大小打印为编译器错误。
template <size_t> struct PrintSize;
PrintSize<sizeof(int)> a;
编译该代码时,您将能够从编译器发出的错误消息中判断int
的大小。