151得票9回答
static_assert是用来做什么的,以及它有什么用途? (注意:这只是一个提问标题,不需要回答问题。)

你能给出一个例子,说明在什么情况下使用 static_assert(...) ('C++11')能够优雅地解决问题吗? 我熟悉运行时的 assert(...)。在什么情况下,应该选择使用 static_assert(...) 而不是普通的 assert(...) ? 此外,在 boost ...

129得票16回答
C语言中的静态断言

如何在C语言中(而非C++)实现编译时静态断言,尤其是在GCC编译器下的实现?

71得票8回答
constexpr if and static_assert

P0292R1 constexpr if已经被纳入, 有望成为C++17的一部分。它看起来很实用(可以替代SFINAE的使用),但是关于static_assert在false分支中会出现非法,无需诊断的评论让我感到担忧: Disarming static_assert declaration...

69得票4回答
在static_assert输出中集成类型名称?

我喜欢提供有用的错误/信息,我也希望为我的static_assert做到这一点。问题是,它们取决于模板参数。通常,由于引发的错误,这些参数将以某种方式显示,但它们要么晦涩难懂,要么没有分组,因此它们不具有意义。例如: template<class T> struct fake_d...

62得票2回答
C++11 - 在constexpr函数中使用static_assert?

在一个 constexpr 函数中如何正确地执行 static_assert?例如:constexpr int do_something(int x) { static_assert(x > 0, "x must be > 0"); return x + 5; } 这不是有...

49得票4回答
static_assert失败编译,即使模板函数没有被调用

我使用带有c++0x标志的g++ 4.6.3(目前ubuntu 12.04的默认软件包),然后遇到了这个问题: template <typename T> inline T getValue(AnObject&) { static_assert(false , "...

46得票5回答
如何在编译时检查结构体的大小?

我希望在编译期间添加代码,检查结构体的大小以确保它是预定义的大小。例如,当我将此代码移植或在编译时添加/删除结构体中的项目时,我希望确保结构体的大小为1024个字节:#pack(1) struct mystruct { int item1; int item2[100]; ...

36得票5回答
使用static_assert来检查传递给宏的类型

很不幸,我有几个宏是从我的库的原版本中遗留下来的,使用了一些相当疯狂的 C 语言代码。特别是,我有一系列期望传递某些类型的宏。是否可能做出类似以下的操作:static_assert(decltype(retval) == bool); 那么怎么办?有没有聪明的替代方案? 是的,我知道宏是不好的...

36得票4回答
如何将模板类限制为特定的内置类型?

这个问题已经讨论了几次,但我找到的所有解决方案要么不起作用,要么基于boost的静态断言。我的问题很简单。我有一个类,并且我只想允许使用实数类型(double和float)。如果我尝试使用除float或double以外的类型来实例化该类,则希望在编译时出现错误。我正在使用Visual C++ ...

29得票1回答
如何在编译时检查两种类型是否相同(如果能与Boost strong typedef一起使用就更好了)?

我想知道在编译时是否可能检查2种类型是否相同。 我想到的方法是(我不知道它是否有效,因为感觉有些hackish,而且我对标准了解不够,所以不知道测试时应该查找什么)。 #include <boost/strong_typedef.hpp> BOOST_STRONG_TYPEDEF...