static-assert相关内容
#include int main() { auto f1 = [](auto&) mutable {}; static_assert(std::is_invocable_v); // ok auto const f2 = [](auto&) {}; static_assert(std::is_
..
我有这个代码: const float foo = 5.0F;static_assert(foo > 0.0F, "foo 必须大于 0."); 但是在 visual-studio-2010 我得到错误: 错误 C2057:预期的常量表达式 我实际上这样做是正确的,visual-studio-2010 只是没有正确实现 static_assert,对吧?在 visual-studi
..
我使用带有标志 c++0x 的 g++ 4.6.3(当前是 ubuntu 12.04 的默认包),我偶然发现了这个: 模板内联 T getValue(AnObject&){static_assert(false , "此函数必须为所需类型实现");} 编译错误: static_assertion 失败“必须为所需类型实现此函数" 即使我还没有在任何地方调用此函数.
..
我正在尝试用 boost::lockfree::queue 替换此文件中的 std::queue https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp 我添加了 #include ;更改行
..
这是我正在尝试做的简化版本 枚举优先{一个,乙,C,nbElementFirstEnum,};枚举秒{一个,乙,C,nbElementSecondEnum,};静态断言(第一::nbElementFirstEnum == 第二::nbElementSecondEnum,“枚举中的元素数量不同.");/*静态断言(第一::nbElementFirstEnum == 第二::nbElementSec
..
我曾尝试使用 此建议 来执行静态断言,但如果我执行此操作,我不会收到编译错误在模板的方法中使用它. 示例如下: #include #define STATIC_ASSERT(expr, msg) \{ \char STATIC_ASSERTION__##msg[(expr)?1:-1];\(void)STATIC_ASSERTION__##msg[0];\}模板
..
由于我工作的公司禁止使用 boost,因此我需要用纯 C++ 实现其功能.我已经研究了 boost 源,但它们似乎太复杂而无法理解,至少对我来说是这样.我知道 C++0x 标准中有一种叫做 static_assert() 的东西,但我不想使用任何 C++0x 特性. 解决方案 另一个技巧(可以在 C 中使用)是在断言失败时尝试构建一个大小为负的数组: #define ASSERT(con
..
不幸的是,我的库的原始版本中遗留了几个宏,它们使用了一些非常疯狂的 C.特别是,我有一系列宏希望将某些类型传递给它们.是否可以按照以下方式进行操作: static_assert(decltype(retval) == bool); 怎么办?有什么聪明的选择吗? 是的,我知道宏很糟糕.我知道 C++ 不是 C,等等. 更新0 这是一些相关代码,以及源文件.欢迎提出建议.原始问题
..
我喜欢提供有用的错误/消息,我也想为我的 static_assert 这样做.问题是,它们依赖于模板参数.通常,由于引发的错误,这些参数会在途中或其他地方显示,但它们要么模糊不清,要么没有分组,因此它们是有意义的.示例: templatestruct fake_dependency{static bool const value = false;};模板结构 Foo{Foo(){
..
P0292R1 constexpr if 已经
..
我使用带有标志 c++0x 的 g++ 4.6.3(当前 ubuntu 12.04 的默认包),我偶然发现了这个: template 内联 T getValue(AnObject&){static_assert(false , "必须为所需类型实现此函数");} 编译错误: static_assertion 失败“必须为所需类型实现此函数" 即使我还没有在任何地方调用这个函数. 这是
..
static_assert 与模板一起似乎是一个非常好的功能. 但是,我无法在标准库中找到用于在编译时进行各种测试的函数. 例如,我正在寻找一个函数来检查一个类型是否是另一个类型的子类型.boost::is_base_of 可以完成这项工作,但是,它是 std 中的一个类似函数,所以我不需要依赖 boost. 基本上,是否有可以在 static_assert 中使用并包含在 C+
..
你能举一个例子,说明 static_assert(...) ('C++11') 可以优雅地解决手头的问题吗? 我熟悉运行时assert(...).什么时候我应该更喜欢 static_assert(...) 而不是常规的 assert(...)? 另外,在boost中有一个叫做BOOST_STATIC_ASSERT的东西,它和static_assert(...)一样吗? 解决方案
..
我正在整理一些旧代码,这些代码到处使用“幻数"来设置硬件寄存器,我想使用常量而不是这些数字来使代码更具表现力(实际上它们会映射用于记录寄存器的名称/值). 但是,我担心随着更改量的增加,我可能会打破魔幻数字.下面是一个简化的例子(寄存器组更复杂): const short mode0 = 0;const 短模式 1 = 1;const short mode2 = 2;const short
..
在 C(不是 C++)中实现编译时静态断言的最佳方法是什么,特别强调 GCC? 解决方案 C11 标准添加了 _Static_assert 关键字. 这是自 gcc-4.6 开始实施: _Static_assert (0, "assert1");/* { dg-error "静态断言失败:\"assert1\"" } */ 第一个槽需要是一个整数常量表达式.第二个槽是一个可以很长
..
我有一个执行除法和检查对齐的宏. #define BYTES_TO_WORDS(x) ((CHECK_ALIGNMENT(x,2)) * ((x)/2)) 我想将 CHECK_ALIGNMENT 实现为一个总是返回 1 的宏,如果 x 没有被 2 除会触发一个错误. 宏 BYTES_TO_WORDS 从不同的上下文中调用,有时使用 x 作为编译时常量整数表达式,其他时候使用 x 作为整数表达
..
当表达式依赖于类类型本身时,有没有办法在类内部进行 static_assert ?也许延迟评估直到类型完成或模板实例化之后? 示例代码: #include 模板结构测试{T x = 0;//使非平凡static_assert(std::is_trivial>::value, "");};int main() {//想要静态断言失败,而是得到“不完整类型"错误测试测试1;测试
..
我正在尝试了解 static_assert 的用处,我想知道它是否可以帮助我执行设计,如果可以,如何帮助我. 我有一个通用模板类,该类将自己的实现隐藏在另一个模板类中,该类根据模板类型的大小部分进行了特殊化.以下是此设计的简要概述: template 结构帮手;模板struct Helper{静态T bar();};//... 其他专业 ...模板Foo类{民众:钢条(){返回 Helpe
..
这是另一个问题 的后续 我试图在编译时确定特定实现是否在结构中添加了未命名的填充.像 gcc 这样的特定实现允许使用编译指示来控制结构中的填充和对齐,但代价是与其他实现兼容.由于 C11 的 n1570 草案需要 static_assert 和 offset_of,我想用它们来查看实现是否使用了成员之间的填充. 这是代码的相关部分(参考问题中的完整代码): #include #incl
..
以下代码可以正常编译: #include模板structdependent_true:std :: true_type {};模板structdependent_false:std :: false_type {};模板类X {static_assert(dependent_fal
..