static-assert相关内容

即使模板函数在任何地方都没有调用,static_assert 也无法编译

我使用带有标志 c++0x 的 g++ 4.6.3(当前是 ubuntu 12.04 的默认包),我偶然发现了这个: 模板内联 T getValue(AnObject&){static_assert(false , "此函数必须为所需类型实现");} 编译错误: static_assertion 失败“必须为所需类型实现此函数" 即使我还没有在任何地方调用此函数. ..
发布时间:2022-01-23 20:13:04 C/C++开发

在 static_assert() 编译时显示整数

这是我正在尝试做的简化版本 枚举优先{一个,乙,C,nbElementFirstEnum,};枚举秒{一个,乙,C,nbElementSecondEnum,};静态断言(第一::nbElementFirstEnum == 第二::nbElementSecondEnum,“枚举中的元素数量不同.");/*静态断言(第一::nbElementFirstEnum == 第二::nbElementSec ..
发布时间:2022-01-11 20:03:44 C/C++开发

如何用宏做static_assert?

我曾尝试使用 此建议 来执行静态断言,但如果我执行此操作,我不会收到编译错误在模板的方法中使用它. 示例如下: #include #define STATIC_ASSERT(expr, msg) \{ \char STATIC_ASSERTION__##msg[(expr)?1:-1];\(void)STATIC_ASSERTION__##msg[0];\}模板 ..
发布时间:2022-01-11 19:27:25 C/C++开发

BOOST_STATIC_ASSERT 没有提升

由于我工作的公司禁止使用 boost,因此我需要用纯 C++ 实现其功能.我已经研究了 boost 源,但它们似乎太复杂而无法理解,至少对我来说是这样.我知道 C++0x 标准中有一种叫做 static_assert() 的东西,但我不想使用任何 C++0x 特性. 解决方案 另一个技巧(可以在 C 中使用)是在断言失败时尝试构建一个大小为负的数组: #define ASSERT(con ..
发布时间:2021-12-24 15:08:37 C/C++开发

使用 static_assert 检查传递给宏的类型

不幸的是,我的库的原始版本中遗留了几个宏,它们使用了一些非常疯狂的 C.特别是,我有一系列宏希望将某些类型传递给它们.是否可以按照以下方式进行操作: static_assert(decltype(retval) == bool); 怎么办?有什么聪明的选择吗? 是的,我知道宏很糟糕.我知道 C++ 不是 C,等等. 更新0 这是一些相关代码,以及源文件.欢迎提出建议.原始问题 ..
发布时间:2021-12-14 19:31:17 C/C++开发

在 static_assert 输出中集成类型名称?

我喜欢提供有用的错误/消息,我也想为我的 static_assert 这样做.问题是,它们依赖于模板参数.通常,由于引发的错误,这些参数会在途中或其他地方显示,但它们要么模糊不清,要么没有分组,因此它们是有意义的.示例: templatestruct fake_dependency{static bool const value = false;};模板结构 Foo{Foo(){ ..
发布时间:2021-12-13 19:23:33 C/C++开发

即使在任何地方都没有调用模板函数,static_assert 编译失败

我使用带有标志 c++0x 的 g++ 4.6.3(当前 ubuntu 12.04 的默认包),我偶然发现了这个: template 内联 T getValue(AnObject&){static_assert(false , "必须为所需类型实现此函数");} 编译错误: static_assertion 失败“必须为所需类型实现此函数" 即使我还没有在任何地方调用这个函数. 这是 ..
发布时间:2021-12-13 18:30:53 C/C++开发

C++11 static_assert(以及在其中使用的函数)

static_assert 与模板一起似乎是一个非常好的功能. 但是,我无法在标准库中找到用于在编译时进行各种测试的函数. 例如,我正在寻找一个函数来检查一个类型是否是另一个类型的子类型.boost::is_base_of 可以完成这项工作,但是,它是 std 中的一个类似函数,所以我不需要依赖 boost. 基本上,是否有可以在 static_assert 中使用并包含在 C+ ..
发布时间:2021-11-30 11:39:43 C/C++开发

在 C 中构建时断言表达式的方法

我正在整理一些旧代码,这些代码到处使用“幻数"来设置硬件寄存器,我想使用常量而不是这些数字来使代码更具表现力(实际上它们会映射用于记录寄存器的名称/值). 但是,我担心随着更改量的增加,我可能会打破魔幻数字.下面是一个简化的例子(寄存器组更复杂): const short mode0 = 0;const 短模式 1 = 1;const short mode2 = 2;const short ..
发布时间:2021-11-30 11:18:56 其他开发

C中的静态断言

在 C(不是 C++)中实现编译时静态断言的最佳方法是什么,特别强调 GCC? 解决方案 C11 标准添加了 _Static_assert 关键字. 这是自 gcc-4.6 开始实施: _Static_assert (0, "assert1");/* { dg-error "静态断言失败:\"assert1\"" } */ 第一个槽需要是一个整数常量表达式.第二个槽是一个可以很长 ..
发布时间:2021-11-30 11:18:09 其他开发

在静态断言和运行时错误之间自动选择

我有一个执行除法和检查对齐的宏. #define BYTES_TO_WORDS(x) ((CHECK_ALIGNMENT(x,2)) * ((x)/2)) 我想将 CHECK_ALIGNMENT 实现为一个总是返回 1 的宏,如果 x 没有被 2 除会触发一个错误. 宏 BYTES_TO_WORDS 从不同的上下文中调用,有时使用 x 作为编译时常量整数表达式,其他时候使用 x 作为整数表达 ..
发布时间:2021-09-18 19:12:00 C/C++开发

解决静态断言中的不完整类型

当表达式依赖于类类型本身时,有没有办法在类内部进行 static_assert ?也许延迟评估直到类型完成或模板实例化之后? 示例代码: #include 模板结构测试{T x = 0;//使非平凡static_assert(std::is_trivial>::value, "");};int main() {//想要静态断言失败,而是得到“不完整类型"错误测试测试1;测试 ..
发布时间:2021-09-04 20:52:23 C/C++开发

通过 static_assert 强制模板类型

我正在尝试了解 static_assert 的用处,我想知道它是否可以帮助我执行设计,如果可以,如何帮助我. 我有一个通用模板类,该类将自己的实现隐藏在另一个模板类中,该类根据模板类型的大小部分进行了特殊化.以下是此设计的简要概述: template 结构帮手;模板struct Helper{静态T bar();};//... 其他专业 ...模板Foo类{民众:钢条(){返回 Helpe ..
发布时间:2021-09-04 20:47:17 C/C++开发

我们可以使用 static_assert 来检测结构中的填充吗?

这是另一个问题 的后续 我试图在编译时确定特定实现是否在结构中添加了未命名的填充.像 gcc 这样的特定实现允许使用编译指示来控制结构中的填充和对齐,但代价是与其他实现兼容.由于 C11 的 n1570 草案需要 static_assert 和 offset_of,我想用它们来查看实现是否使用了成员之间的填充. 这是代码的相关部分(参考问题中的完整代码): #include #incl ..
发布时间:2021-08-31 19:06:31 其他开发