小编Cof*_*ime的帖子

只有布尔文字值的概念是格式错误的,不需要诊断吗?

我在完全从任何模板中删除的上下文中玩弄 C++ 概念和函数重载,并偶然发现了这一点:

struct S
{
    int mult(int x) requires (true)  { return x; }
    int mult(int x) requires (false) { return x * 2; }
};

int main()
{
    std::cout << S{}.mult(5) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

g++ 11 拒绝编译此代码段,因为requires-clauses 可能不会附加到非模板函数。

然而,clang++ 13 对这个代码段很好,但令人惊讶的是它吐出10而不是5我所期望的。

我知道 C++20 标准最近才出炉,所以我完全理解关于概念有很多问题需要解决。

忽略常量字面概念的明显无用,我的问题是:带有 -requires子句的程序是否总是格式错误的false,可能不需要诊断?或者,也许,正如 g++ 所说,我什至根本没有合法的 C++?

c++ language-lawyer c++-concepts c++20

22
推荐指数
2
解决办法
923
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1

language-lawyer ×1