static-assert相关内容
我有这样的代码: const float foo = 5.0F; static_assert(foo> 0.0F,“foo必须大于0”); 但是在 visual-studio-2010 没有正确实现 static_assert ,对吗?在 visual-studio-2017 它按预期工作。 有一些关于 const 和 constexpr 。我
..
我写了几个constexpr函数,并在static_asserts中使用它们来控制一些资源限制。但是我希望不仅强制编译时谓词,还要查看在正常编译过程中计算的实际值,或者至少在断言失败时。 有几种方法在编译期间打印字符串消息,但关于constexpr计算的打印结果是什么? 这里是一些利用gcc诊断消息的代码在断言消息之后打印感兴趣的值。要找到感兴趣的值,您只需要搜索错误字符串 T x = :
..
使用以下宏: #define ASSERT_IF_TEMP(expr)static_assert 我应该为问号放什么? 解决方案 首先我们应该澄清一下:”临时“是什么意思? 。从技术上讲, int()不是一个临时的,但大多数人会将它们包含在自己对该术语的意义上。技术上,给定 std :: string s; ,然后 move(s)可能想把它作为一个与你
..
我想要类型 double , float , complex 和 complex 以传递 static_assert 条件。我想到 static_assert(std :: is_floating :: value,“一些消息”)会做的技巧,但复杂类型不通过这个测试下gcc-4.10)。 我需要添加什么谓词,以确保这四种类型(也许 long doub
..
在我的上一个问题我想使用static_assert来将模板参数限制为特定的子类型。问题回答,archieving的代码如下: template struct X { static_assert(std :: is_base_of :: value,“T必须从Y! }; 现在,我想让错误消息更简洁。也就是说,我想说明哪种类型违反
..
有没有办法让static_assert的字符串被动态自定义然后显示? 我的意思是: //伪代码 static_assert(Check_Range :: value,“value of”+ typeof(T)+“type is not good)。 解决方案 不,没有。 然而,这并不重要,因为 static_assert 在编译时被评估,如果发生错
..
我有一个模板成员函数,看起来有点像下面: template :: value,“对象类型必须可复制”); //按位向下发送数据 ... } 然后,我
..
static_assert可以检查类型是否为向量? IE, int 将引发断言,而向量 不会。 我正在考虑一些类似于下面的东西: static_assert(decltype(T)== std :: vector,一些错误“) 解决方案 考虑以下元函数: #include #include template
..
我注意到,当实例化 typedef '时,不会触发类模板中的静态断言。 #include template struct test_assert { static_assert(std :: is_same :: value,“should fail”); } typedef test_ass
..
假设我有这些类型: struct A { int a; }; struct B { int b; }; struct C:public A,public B { int c; }; A C * A * 指针,而根本不调整实际地址。但是当 C * 被转换为 B * 时,值必须更改。我想确保两个相关类型我可以相互转换,而不改变地址(即没有多
..
我想在我工作的代码库中开始使用 static_assert 。不幸的是,并不是所有的C ++编译器都支持它们。在过去,我们使用了一个编译时断言宏,它适用于所有我试过的编译器(从SO!收集),但是,它提供了一些尴尬的编译错误信息。 我们支持大量的编译器,包括不支持 static_assert 的编译器。此外,因为我们的产品是一个带有源代码的SDK,我们的客户可以使用任何他们想要的编译器重新编译
..
我想在我工作的代码库中开始使用 static_assert 。不幸的是,并不是所有的C ++编译器都支持它们。在过去,我们使用了一个编译时断言宏,它适用于所有我试过的编译器(从SO!收集),但是,它提供了一些尴尬的编译错误信息。 我们支持大量的编译器,包括不支持 static_assert 的编译器。此外,因为我们的产品是一个带有源代码的SDK,我们的客户可以使用任何他们想要的编译器重新编译
..
通过抽象类,我的意思是至少有一个纯虚方法的类。如果检查显示该类不为抽象,则我希望编译失败。 是否可能? 解决方案 使用 std :: is_abstract 。 #include static_assert(std :: is_abstract(),“T ought be abstract。 查看 in actio
..
通过抽象类,我的意思是至少有一个纯虚方法的类。如果检查显示该类不为抽象,则我希望编译失败。 是否可能? 解决方案 使用 std :: is_abstract 。 #include static_assert(std :: is_abstract(),“T ought be abstract。 查看 in actio
..
此问题的灵感来自我之前的问题没有模板参数推导参数包。 请考虑以下代码示例: # include #include template class Callback { public: class Handle {}; }; class BaseCallbackHandle
..
给定以下 #include struct litmus final:std :: array { }; static_assert(std :: is_pod> :: value,“not pod”); //在MSVC上失败: static_
..
假设我有一个模板函数,它接受一个整数和一个常量引用一个T类型的实例。现在根据整数,只有一些T是可以接受的,否则在运行时抛出一个异常。 如果此函数的所有使用都使用常量整数,那么可以使int为模板参数,并使用静态断言检查是否可接受。因此,代替 func(1,c),将使用 func(c)时间类型检查。有任何方法写 func(1,c)并仍然保持编译时检查,同时也能写 func c)并使用动态
..
我们现有的编译时断言实现是基于负数组索引,并且它在GCC上提供差的诊断输出。 C ++ 0x的 static_assert 是一个非常好的功能,它提供的诊断输出更好。我知道GCC已经实现了一些C ++ 0x功能。有没有人知道 static_assert 是否在其中,如果是那么自从什么GCC版本? 解决方案 根据此网页,gcc已拥有 static_assert 自4.3。
..
这个问题已经讨论了几次,但是我发现的所有解决方案都没有工作,或者基于boost的静态断言。我的问题很简单。我有一个类,我只想允许真正的类型(双和浮动)。我想要一个编译时错误,如果我尝试实例化类与非float或double类型。我使用Visual C ++ 11.这是我试过的: template class A { //警告C4346 s
..
我想知道是否可以检查2种类型在编译时是否相同。 我想出的是(idk,如果它工作,因为它感觉hackish和IDK标准,所以IDK测试时寻找)。 #include BOOST_STRONG_TYPEDEF(double,cm); BOOST_STRONG_TYPEDEF(double,inch); template
..