C++ 在编译时触发void constexpr?

C++ 在编译时触发void constexpr?,c++,constexpr,c++17,compile-time,static-assert,C++,Constexpr,C++17,Compile Time,Static Assert,我有一个constexpr函数,它将设计合同的许多static_断言进行分组。我希望在编译时调用它,而不必创建未使用的constexpr变量 下面是我目前必须做的一个例子(c++17) 模板 内联constexpr int tuple_for(const std::tuple&t,const F&func){ func(std::get(t)); 如果constexpr(N

我有一个
constexpr
函数,它将设计合同的许多
static_断言进行分组。我希望在编译时调用它,而不必创建未使用的
constexpr
变量

下面是我目前必须做的一个例子(c++17)

模板
内联constexpr int tuple_for(const std::tuple&t,const F&func){
func(std::get(t));
如果constexpr(N
有没有其他方法可以实现这种行为?也许是c++17中的新功能

多谢各位

编辑:
请注意,由于这些检查是通用的,我认为在函数中使用断言是正确的方法。

static\u assert
是一个声明语句,因此您可以在自由空间中对其进行链接

不需要函数


这正是它的用例。:)

static\u assert
是一个声明语句,因此您可以在空闲空间中将其链接

不需要函数


这正是它的用例。:)

您可以在其他constexpr上下文中将其用作
static\u assert

static_assert((static_cast<void>(tuple_for(my_tuple, do_checks)), true), "!");
static\u assert((static\u cast(tuple\u for(my\u tuple,do\u checks)),true),“!”;

[注意]:如果您想返回带有逗号的类,则对
void
的强制转换是泛化。

您可以在其他constexpr上下文中使用它作为
静态\u assert

static_assert((static_cast<void>(tuple_for(my_tuple, do_checks)), true), "!");
static\u assert((static\u cast(tuple\u for(my\u tuple,do\u checks)),true),“!”;

[注意]:如果您想返回带有恶意重载逗号的类,则对
void
的强制转换是泛化。

您实际上不需要任何包装函数,只需按原样放置
static\u assert
。我应该修改示例,它在对象元组上运行。因此,在实际的代码库中,它必须是。为什么需要返回?只需调用这个函数,不带返回值。@Kobi:从何处调用它,我认为这就是问题所在。确切地说,您需要为要在编译时运行的方法指定一个constexpr值。例如,您不能只调用内联代码的方法。您实际上不需要任何包装函数,只需按原样放置
static\u assert
。我应该修改示例,它在对象的元组上运行。因此,在实际的代码库中,它必须是。为什么需要返回?只需调用这个函数,不带返回值。@Kobi:从何处调用它,我认为这就是问题所在。确切地说,您需要为要在编译时运行的方法指定一个constexpr值。举例来说,你不能只调用内联代码的方法。这个例子很糟糕,我将对它进行编辑,使其更像我正在做的事情。5分钟:)这个例子很糟糕,我将对它进行编辑,使其更像我正在做的事情。5分钟:)谢谢,虽然不好看,但这是完美的。什么是邪恶的逗号重载?听起来很有趣。哦,天哪!那太邪恶了。。。我喜欢它:D做了一个小的宏助手,看起来很干净。谢谢,虽然不是很好看,但这是完美的。什么是邪恶的逗号重载?听起来很有趣。哦,天哪!那太邪恶了。。。我喜欢它:D做了一个小宏助手,看起来很干净。