14得票2回答
为什么if constexpr需要一个else才能工作?

我试图以以下方式使用if constexpr: template<template <typename First, typename Second> class Trait, typename First, typename Second, typename......

12得票1回答
如何正确使用概念?

目前,我正在学习C++,决定直接开始使用C++20。然而,这些代码让我感到疯狂,因为我认为结果毫无意义。 下面的代码将打印句子Valid array。 我上面的意思是这不对。它根本不应该打印出这个句子,因为我在参数中插入的类型与概念不匹配。 在VS2022 Preview 3和一个在线编译器上...

11得票1回答
嵌套的constexpr-if语句在被丢弃的分支中仍然会被求值吗?

据我所知,在另一个constexpr-if语句的被丢弃分支中的constexpr-if语句在MSVC(版本15.7.3)中被评估。 考虑以下代码: #include <tuple> #include <type_traits> template <size_...

11得票1回答
在模板化的lambda中,如果constexpr的if语句分支为false,则不会被丢弃。

我在一个模板化的lambda表达式中遇到了“if constexpr”的问题。为了论证,让我们先忽略我如何到达这里,但我有一个名为foo的结构体,定义方式如下: template<bool condition> struct foo { int a; // O...

11得票1回答
constexpr自动函数中的constexpr-if-else体能够返回不同类型吗?

我正在尝试编写一个函数,根据枚举的运行时值将一组类型映射到值。我意识到根据枚举的运行时值返回不同的类型是不可能的,因为编译器将无法知道要分配多少堆栈空间。但是,我正在尝试将其作为constexpr函数编写,使用新的if-constexpr功能来实现此操作。 我从clang中得到了一个错误,指...

10得票1回答
std::is_member_function_pointer如果为false,则无法编译

我需要的内容:我有一个模板类,如果该类具备相应的函数,我想要调用这个函数,类似于以下代码实现: template<class T> do_something() { if constexpr (std::is_member_function_pointer<decl...

9得票1回答
constexpr-if使用中遇到错误:在'constexpr'前缺少'('。

我尝试使用if-constexpr来检查某些内容,但是我遇到了如下错误: 在“constexpr”之前需要“(” “else” 没有前一个“if” 到目前为止,我检查了我的代码,没有发现任何问题。 我的编译标志是 g++ -std=c++17 main.cpp #include...

8得票3回答
在for循环语句中使用constexpr

c++17 提供了if constexpr,其中: 条件的值必须是一个上下文转换后的常量表达式,其类型为bool。如果该值为true,则会丢弃语句二(如果存在),否则将丢弃语句一。 是否有办法在for循环中使用这个语句?能否实现编译时循环展开?我想要像这样做: template &l...

8得票1回答
“if constexpr” 在模板之外是否有用?

我正在努力完全理解if constexpr。 我了解,如果在模板中使用if constexpr(expr),并且expr依赖于模板参数,那么在实例化期间,只有一个then/else分支将被实例化,另一个将被丢弃。 我的两个问题是: 如果expr不依赖于模板参数,是否真的如此,那么if ...

8得票1回答
MSVC在使用constexpr if的可变模板方法中会忽略基本模板参数中的const限定符。

我有一个问题,我几乎确定是MSVC的一个bug,但也许我漏掉了什么。 这是实际代码的简化版本: template <typename... Args> class InnerType {}; template <typename... Args> class Ou...