static-assert相关内容

如何在C ++中打印编译时计算结果?

我写了几个constexpr函数,并在static_asserts中使用它们来控制一些资源限制。但是我希望不仅强制编译时谓词,还要查看在正常编译过程中计算的实际值,或者至少在断言失败时。 有几种方法在编译期间打印字符串消息,但关于constexpr计算的打印结果是什么? 这里是一些利用gcc诊断消息的代码在断言消息之后打印感兴趣的值。要找到感兴趣的值,您只需要搜索错误字符串 T x = : ..
发布时间:2018-04-20 16:49:17 C/C++开发

如何测试表达式是否是临时的?

使用以下宏: #define ASSERT_IF_TEMP(expr)static_assert 我应该为问号放什么? 解决方案 首先我们应该澄清一下:”临时“是什么意思? 。从技术上讲, int()不是一个临时的,但大多数人会将它们包含在自己对该术语的意义上。技术上,给定 std :: string s; ,然后 move(s)可能想把它作为一个与你 ..
发布时间:2016-11-06 03:43:21 C/C++开发

static_assert - 一种动态自定义错误消息的方法

有没有办法让static_assert的字符串被动态自定义然后显示? 我的意思是: //伪代码 static_assert(Check_Range :: value,“value of”+ typeof(T)+“type is not good)。 解决方案 不,没有。 然而,这并不重要,因为 static_assert 在编译时被评估,如果发生错 ..
发布时间:2016-11-06 02:21:51 C/C++开发

static_assert可以检查类型是否是向量?

static_assert可以检查类型是否为向量? IE, int 将引发断言,而向量 不会。 我正在考虑一些类似于下面的东西: static_assert(decltype(T)== std :: vector,一些错误“) 解决方案 考虑以下元函数: #include #include template ..
发布时间:2016-11-05 23:43:00 C/C++开发

static_assert c ++ 11的可用性

我想在我工作的代码库中开始使用 static_assert 。不幸的是,并不是所有的C ++编译器都支持它们。在过去,我们使用了一个编译时断言宏,它适用于所有我试过的编译器(从SO!收集),但是,它提供了一些尴尬的编译错误信息。 我们支持大量的编译器,包括不支持 static_assert 的编译器。此外,因为我们的产品是一个带有源代码的SDK,我们的客户可以使用任何他们想要的编译器重新编译 ..
发布时间:2016-10-25 16:54:24 C/C++开发

static_assert c ++ 11的可用性

我想在我工作的代码库中开始使用 static_assert 。不幸的是,并不是所有的C ++编译器都支持它们。在过去,我们使用了一个编译时断言宏,它适用于所有我试过的编译器(从SO!收集),但是,它提供了一些尴尬的编译错误信息。 我们支持大量的编译器,包括不支持 static_assert 的编译器。此外,因为我们的产品是一个带有源代码的SDK,我们的客户可以使用任何他们想要的编译器重新编译 ..
发布时间:2016-10-25 16:51:43 C/C++开发

如果可能,静态断言,否则动态断言?

假设我有一个模板函数,它接受一个整数和一个常量引用一个T类型的实例。现在根据整数,只有一些T是可以接受的,否则在运行时抛出一个异常。 如果此函数的所有使用都使用常量整数,那么可以使int为模板参数,并使用静态断言检查是否可接受。因此,代替 func(1,c),将使用 func(c)时间类型检查。有任何方法写 func(1,c)并仍然保持编译时检查,同时也能写 func c)并使用动态 ..
发布时间:2016-10-23 14:23:52 C/C++开发

GCC有一个内置的编译时断言吗?

我们现有的编译时断言实现是基于负数组索引,并且它在GCC上提供差的诊断输出。 C ++ 0x的 static_assert 是一个非常好的功能,它提供的诊断输出更好。我知道GCC已经实现了一些C ++ 0x功能。有没有人知道 static_assert 是否在其中,如果是那么自从什么GCC版本? 解决方案 根据此网页,gcc已拥有 static_assert 自4.3。 ..
发布时间:2016-10-23 11:22:47 C/C++开发

如何将模板类限制为某些内置类型?

这个问题已经讨论了几次,但是我发现的所有解决方案都没有工作,或者基于boost的静态断言。我的问题很简单。我有一个类,我只想允许真正的类型(双和浮动)。我想要一个编译时错误,如果我尝试实例化类与非float或double类型。我使用Visual C ++ 11.这是我试过的: template class A { //警告C4346 s ..
发布时间:2016-10-22 18:39:16 C/C++开发