当前位置: 首页 > 知识库问答 >
问题:

如果constexpr和依赖的false static_assert格式错误?

浦琪
2023-03-14

一个相关的问题提供了static_assert中与类型无关的false的示例:

template<class T> void foo()
{
    if constexpr(false)
        static_assert(false);
}

但是,我更关心的是,同样的事情是否适用于依赖类型的false。以下是标准中的相关引用:

如果不能为模板或模板中的constexpr if语句的子语句生成有效的专门化,并且模板没有实例化,则程序格式不正确,不需要诊断。§13.7/8.1

template<class T> void foo()
{
    if constexpr(cond)
        // ...
    else
        static_assert(!std::is_same_v<T, T>);
}

事实上,cppreference甚至提供了相同事情的一个示例:

template<class T> struct dependent_false : std::false_type {};
template<class T> void foo()
{
    if constexpr (cond)
        // ...
    else
        static_assert(dependent_false<T>::value);
}

根据我的理解,在这两种情况下,都无法为相关的if constexpr子语句生成有效的专门化,因此这些子语句格式不正确,不需要诊断。我说得对吗?

共有1个答案

段干安和
2023-03-14

不能为相关的if constexpr子语句生成有效的专门化

嗯,不。

如果首先专门化dependent_false,则可以对该分支进行有效的专门化:

template <> struct dependent_false<int> : std::true_type {};
///
foo<int>(); // <-- A valid specialization for the `else` branch is possible here
 类似资料:
  • 我对Cocoapods有问题。请在下面找到详细解释, 起初我的椰子是这样的, 吊舱“面料” 豆荚“崩溃” pod “VK视频播放器”, “~ 然后,我的应用程序需要GA(谷歌分析),所以,我添加了 pod“谷歌/分析” 在我的中,它会出现以下错误 由于主要版本更新,重新创建CocoaPods。 正在分析依赖项[!]依赖关系结构(~ 而且,我发现了一个与此问题相关的问题,并在这里找到了答案 之后,我

  • 在FastAdmin中如果需要使用Bootstrap-table,需要使用require引入table模块。table模块对应的是assets/js/require-table.js文件,FastAdmin做了许多通用方法和默认值操作。 载入依赖 require(['table'], function(Table){ //编写实例化代码 //使用Table对象 }); 引入CSS

  • 我想知道以下jar的所有传递依赖项: 将经典命令移动到pom。项目定义依赖关系和输入的xml: mvn依赖:树 将显示: 我没看到魔咒父母: 乍一看,mvn命令似乎可以显示非pom类型的依赖项。 有没有一种方法可以精确地显示使jar保持活动状态所需的每个文件? 谢谢

  • [错误]无法解析插件org.apache.cxf:cxf-java2ws-plugin:2.4.3-fuse-01-02或其依赖项之一:未能读取org.apache.cxf:cxf-java2ws-plugin:jar:2.4.3-fuse-01-02:无法在central(http://repo.maven.apache.org/maven2)中找到org.apache.cxf:cxf-java

  • 在阅读了很多关于这个问题的文章之后,并遵循了这个非常有用的帖子:在npmpackage.json文件中,依赖关系、devDependence和peerDependence之间有什么区别? 我知道依赖项应该引用每个运行时libs,devdependency引用每个对开发依赖项有用的libs。 但是我现在很困惑。对于生产使用,我将不得不我的Angular应用程序。如果我做了,我甚至不能用编译。我需要,

  • 我正在努力理解数据依赖和控制依赖之间的区别。 所以我看到的一个例子是: 数据依赖性,例如,指令使用另一条指令创建的数据 控制依赖性,例如,指令等待更新的reg进行比较 我很难理解的是,例如在beq,我等待登记簿更新,但我也依赖于他的数据。 所以我不知道如何知道它们之间的区别。