我在完全从任何模板中删除的上下文中玩弄 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++?