[c++] यह अमान्य दिखने वाला कोड g ++ 6.0 पर सफलतापूर्वक क्यों संकलित करता है?


Answers

मैंने अपने फेडोरा वीएम पर g++ संस्करण 5.1.1 साथ कमांड चलाया है और निम्न पाया है:

[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?
       ^

हालांकि यह अभी भी संकलित करने में कामयाब रहा ... इसलिए मैंने एएसटी को छोड़ दिया है और यह मिला है:

$ 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      

जो टिप्पणी के अंदर फिट होने के लिए बहुत बड़ा है लेकिन यह निर्धारित करने में उपयोगी होना चाहिए कि क्या हो रहा है। मैं अभी भी इस माध्यम से जा रहा हूं लेकिन मैं इस जानकारी को दूसरों के निर्माण के लिए पोस्ट कर रहा हूं।

इस तरह की कल्पना की जाती है

Question

इस प्रश्न का उत्तर यहां दिया गया है:

इस अजीब कार्यक्रम पर विचार करें:

int main()
{
    int(*){} Is it C++14 or any other language?
}

( here और here एक लाइव डेमो देखें।)

भले ही टिप्पणी // गायब है, कोड किसी भी त्रुटि और चेतावनियों के बिना ठीक संकलित करता है , भले ही मैं g ++ 6.0 में -pedantic-errors विकल्पों का उपयोग करता -pedantic-errors । यह मेरे लिए एक कंपाइलर बग की तरह लगता है। क्या यह वास्तव में संकलक में एक बग है?




Related



Tags

c++ c++   g++