小编cre*_*ire的帖子

使void成为原始类型的设计原理是什么?

在类型Type.IsPrimitive上使用反射时void返回false.从C++背景中进行复制,这是令人惊讶的.

查看C#6.0规范(页82)未提及void类型,这可能意味着它未完全归类为类型.

是否有任何语言规范或其他内容将其归类void为其他内容.或任何其他讨论或提及其背后的原因?

c# language-lawyer

32
推荐指数
3
解决办法
2818
查看次数

static_assert失败检查模板化对象指针

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上尝试过)

解决方法有哪些?由于我正在使用抽象模板化类,如果断言仅在实例化非指针对象时执行,那将是一场噩梦.我可以使用工厂,但这不是一个合适的解决方案.

c++ templates static-assert assertions c++11

2
推荐指数
1
解决办法
339
查看次数

标签 统计

assertions ×1

c# ×1

c++ ×1

c++11 ×1

language-lawyer ×1

static-assert ×1

templates ×1