编译器扩展违规未被拦截:零长度数组在约束验证中的问题
关于C++零长度数组在概念约束中的编译器行为疑问
以下代码中,C++标准不允许零长度数组,但Clang却能正常编译通过,而GCC和MSVC会拒绝:
template<typename T> concept c = requires { T{}; }; static_assert(c<int[]>); // clang ok, gcc nope, msvc nope
有几个疑问需要明确:
- 已知Clang、GCC等编译器可通过扩展支持零长度数组,但在验证概念约束的语法时,编译器是否应该采用这种扩展行为?
- 该扩展行为是否同样适用于模板替换失败的场景?
- 此类场景的预期行为是否应该独立于
-pedantic标志?需注意Clang即使启用-pedantic-errors标志仍接受该示例代码。
内容的提问来源于stack exchange,提问作者303
相关产品推荐
相关产品推荐

