CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)
const qualifier accepted in ctor declaration/definition (llvm bug?)
我的编译器(实际上是Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
)接受(编译)该代码:
class X {
private:
int i;
public:
const X() { cout << "here" << endl; i=0; }
void f() const {}
void g() {}
};
int main() {
const X x;
x.f();
// x.g();
X y;
y.f();
y.g();
}
它的工作原理就好像没有const
限定符引导 ctor 定义一样。我尝试了-Wall
,-pedantic
不同类型的标准激活,总是相同的......所以:
- 我错过了什么吗?我无法发现它在最新标准中的语法正确......
- 这是 GCC/LLVM 的错误吗?看来
gcc/llvm
默默地忽略了const
. - 这是我错过的功能,并且我的示例无法证明其有用性吗?
不编译它,也不编译 gcc 4.4.5。
据我所知,这看起来不像有效的语法,C++构造函数12.1
标准部分的草案第 1 段说:
构造函数没有名称。特殊的声明符语法用于声明或定义构造函数。 语法使用:
— 一个可选的 decl-specifier-seq,其中每个 decl-specifier 要么是函数说明符,要么是 constexpr,
— 构造函数的类名,以及
— 参数列表
我们可以从第 7.1.2
节中看到函数说明符如下:
function-specifier:
inline
virtual
explicit
通过阿里在上面的评论中提交了错误报告,并已确认并解决了。
相关文章:
- 编译 llvm 3.1 时,为什么会出现错误:在">"标记之前预期主表达式
- 为什么我的 LLVM JIT 实现出现段错误?
- 使用 LLVM 时出现链接器错误
- 与OpenMP相关的错误,以及使用OpenMP构建LLVM / Clang时C++
- LLVM 的位码错误检测函数参数
- 使用 Apple 的 LLVM 编译器编译 -O 时C++代码段错误,但不使用 g++ -7.2.0
- 不满意的链接错误,当使用LLVM运行javacpp预设时
- llvm错误:重新定位尚未实现!在orcjit或lli中运行RxCpp时
- lli:LLVM错误:无法选择:X86ISD::WrapperRIP TargetGlobalTLSA地址:i64
- LLVM:VS 2015 中的链接错误
- 通过编程复制LLVM IR类型错误
- 由于 LLVM 错误,Xcode 无法编译
- 链接时错误地折叠了LLVM IR类型(C++API)
- LLVM:生成运行时错误
- Apple LLVM 4.1 的 STD 链接器错误
- 来自 clang/llvm 编译器的重复符号错误
- CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)
- LLVM错误:无法解析外部函数
- Xcode LLVM 5.0错误-将来不会出现命令行参数硬错误
- LLVM错误:发现错误的函数,编译中止!后removeFromParent()