在类型Type.IsPrimitive上使用反射时void返回false.从C++背景中进行复制,这是令人惊讶的.
查看C#6.0规范(页82)未提及void类型,这可能意味着它未完全归类为类型.
是否有任何语言规范或其他内容将其归类void为其他内容.或任何其他讨论或提及其背后的原因?
template <size_t N>
class Foo
{
static_assert(N > 0, "WRONG");
//void Something() = 0; //my original implementation
};
int main() {
Foo<0> *p2 = nullptr; //no error
Foo<0> p; //gives an error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已分别测试了两条线.初始化p2时不调用static_assert但是它被调用并确实在p上失败.这是有意的吗?(我在gcc,clang和VC上尝试过)
解决方法有哪些?由于我正在使用抽象模板化类,如果断言仅在实例化非指针对象时执行,那将是一场噩梦.我可以使用工厂,但这不是一个合适的解决方案.