Fei*_*ims 5 c++ language-lawyer c++-concepts c++20
讨论首先在llvm/llvm-project#60377进行。一遍又一遍地阅读temp.constr.atomic和temp.constr.normal后,由于我的英语很差,我对这个问题感到更加困惑。
就像下面的例子一样,为了帮助 clang-format 正确格式化 require 子句,我曾经添加了一对括号。现在我改变了我的风格。当我尝试更改代码时,发生了意外错误。
#include <concepts>
template <typename T>
requires std::integral<T>
struct [[nodiscard]] Widget;
template <typename T>
requires(std::integral<T>) // error: Requires clause differs
struct [[nodiscard]] Widget {
T value;
};
[[nodiscard]] auto main() -> int {
Widget<int> widget{1};
return widget.value;
}
Run Code Online (Sandbox Code Playgroud)
我用不同的编译器对此进行了测试。事实证明:
根据标准、clang/msvc 或 gcc,预期行为是什么?
根据标准、clang/msvc 或 gcc,预期行为是什么?
该标准不要求任何特定行为(C++23 CD [intro.compliance.general] 第 2 段)。该程序格式错误,不需要诊断,因为程序的有效性取决于模板头是否等效([basic.link]第11段)并且它们在功能上等效但不等效([temp.over .link]第7段)。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |