考虑这个奇怪的程序:
int main()
{
int(*){} Is it C++14 or any other language?
}
即使缺少评论//
,,代码编译也没有任何错误&即使我在g ++ 6.0中使用-pedantic-errors
选项,也会发出警告。这对我来说似乎是一个编译器错误。它真的是编译器中的一个错误吗?
答案 0 :(得分:42)
这看起来是我可以在其上测试的所有版本中使用g ++的错误/功能/问题。运行
int main()
{
int(*){} Is it C++14 or any other language?
}
对于没有编译标志的所有g ++版本,在godbolt.org上给出以下程序集输出。
main:
pushq %rbp
movq %rsp, %rbp
movl $0, %eax
leave
ret
我得到的唯一诊断是godbolt.org,即
!!warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Clang,ICC和MSVS都无法编译。
编辑:
答案 1 :(得分:15)
我已使用g++
版本5.1.1
在我的Fedora VM上运行该命令,并找到以下内容:
[user:~] 1 $ g++ -fdump-tree-original-raw tmp.cpp
tmp.cpp: In function ‘int main()’:
tmp.cpp:3:11: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
int(*){} Is it C++14 or any other language?
^
然而,仍然设法编译......所以我dumped the AST得到了这个:
$ cat tmp.cpp.003t.original
;; Function int main() (null)
;; enabled by -tree-original
@1 return_expr type: @2 expr: @3
@2 void_type name: @4 algn: 8
@3 init_expr type: @5 op 0: @6 op 1: @7
@4 type_decl name: @8 type: @2 srcp: <built-in>:0
note: artificial
@5 integer_type name: @9 size: @10 algn: 32
prec: 32 sign: signed min : @11
max : @12
@6 result_decl type: @5 scpe: @13 srcp: tmp.cpp:1
note: artificial size: @10
algn: 32
@7 integer_cst type: @5 int: 0
@8 identifier_node strg: void lngt: 4
@9 type_decl name: @14 type: @5 srcp: <built-in>:0
note: artificial
@10 integer_cst type: @15 int: 32
@11 integer_cst type: @5 int: -2147483648
@12 integer_cst type: @5 int: 2147483647
@13 function_decl name: @16 type: @17 scpe: @18
srcp: tmp.cpp:1 lang: C
link: extern
@14 identifier_node strg: int lngt: 3
@15 integer_type name: @19 size: @20 algn: 128
prec: 128 sign: unsigned min : @21
max : @22
@16 identifier_node strg: main lngt: 4
@17 function_type size: @23 algn: 8 retn: @5
prms: @24
@18 translation_unit_decl
@19 identifier_node strg: bitsizetype lngt: 11
@20 integer_cst type: @15 int: 128
@21 integer_cst type: @15 int: 0
@22 integer_cst type: @15 int: -1
@23 integer_cst type: @15 int: 8
@24 tree_list valu: @2
哪个太大而不适合评论,但应该有助于确定发生了什么。我仍然经历过这个,但我只是发布这些信息供其他人构建。