নিম্নলিখিত কোডটি বৈধ?
template <int N>
class foo {
public:
constexpr foo()
{
for (int i = 0; i < N; ++i) {
v_[i] = i;
}
}
private:
int v_[N];
};
constexpr foo<5> bar;
কলং এটি গ্রহণ করে, তবে জিসিসি এবং এমএসভিসি এটি প্রত্যাখ্যান করে।
জিসিসির ত্রুটিটি হ'ল:
main.cpp:15:18: error: 'constexpr foo<N>::foo() [with int N = 5]' called in a constant expression
15 | constexpr foo<5> bar;
| ^~~
main.cpp:4:15: note: 'constexpr foo<N>::foo() [with int N = 5]' is not usable as a 'constexpr' function because:
4 | constexpr foo()
| ^~~
main.cpp:4:15: error: member 'foo<5>::v_' must be initialized by mem-initializer in 'constexpr' constructor
main.cpp:12:9: note: declared here
12 | int v_[N];
| ^~
এই ধরণের কোড যদি ঠিক থাকে তবে আমি বেশ কয়েকটি index_sequence
গুলি ব্যবহার করতে পারতাম ।
_v
সি ++ 17 অবধি প্রাথমিক সূচনার সূচনা হওয়া উচিত। হতে পারে C ++ 20 এ কিছু পরিবর্তন করা হয়েছে।
int
সদস্যের কাছ থেকে পড়া কখনই অপরিজ্ঞাত আচরণ করবে না "। আমি অবাক হই যে, জিসিসি তা অনুগত নয়, বা অন্যভাবে নয় ...