নিম্নলিখিত কোডটি বেশ তুচ্ছ এবং আমি প্রত্যাশা করেছি যে এটি জরিমানা সংকলন করা উচিত।
struct A
{
struct B
{
int i = 0;
};
B b;
A(const B& _b = B())
: b(_b)
{}
};
আমি এই কোডটি জি ++ সংস্করণ 4.7.2, 4.8.1, ঝাঁকুনি ++ 3.2 এবং 3.3 দিয়ে পরীক্ষা করেছি। এই কোডটিতে g ++ 4.7.2 সেগফাল্টগুলি ( http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57770 ) ছাড়াও অন্যান্য পরীক্ষিত সংকলকরা ত্রুটি বার্তা দেয় যা খুব বেশি ব্যাখ্যা করে না।
g ++ 4.8.1:
test.cpp: In constructor ‘constexpr A::B::B()’:
test.cpp:3:12: error: constructor required before non-static data member for ‘A::B::i’ has been parsed
struct B
^
test.cpp: At global scope:
test.cpp:11:23: note: synthesized method ‘constexpr A::B::B()’ first required here
A(const B& _b = B())
^
ঝনঝন ++ 3.2 এবং 3.3:
test.cpp:11:21: error: defaulted default constructor of 'B' cannot be used by non-static data member initializer which appears before end of class definition
A(const B& _b = B())
^
এই কোডটি সংকলনযোগ্য করা সম্ভব এবং মনে হয় এটির কোনও পার্থক্য করা উচিত নয়। দুটি বিকল্প রয়েছে:
struct B
{
int i = 0;
B(){} // using B()=default; works only for clang++
};
বা
struct B
{
int i;
B() : i(0) {} // classic c++98 initialization
};
এই কোডটি কি সত্যই ভুল বা সংকলকগুলি ভুল?
internal compiler error: Segmentation fault
এই কোডটি বলেছেন ...