আমার কাছে নিম্নলিখিত কোড রয়েছে:
template <typename TC>
class C
{
struct S
{
template <typename TS>
void fun() const
{}
};
void f(const S& s)
{
s.fun<int>();
}
};
// Dummy main function
int main()
{
return 0;
}
এটি জিসিসি 9.2 এবং ক্ল্যাং (9.0) উভয় দিয়ে তৈরি করার সময়, template
কীওয়ার্ডটি চাওয়ার জন্য প্রয়োজনীয় হওয়ার কারণে আমি একটি সংকলন ত্রুটি পেয়ে যাচ্ছি fun
। ঝাঁকুনি শো:
error: use 'template' keyword to treat 'fun' as a dependent template name
s.fun<int>();
^
template
কম্পাইলার কেন fun
প্রসঙ্গে একটি নির্ভরশীল নাম বলে আমি বুঝতে পারি না f
, যেহেতু f
এটি কোনও টেম্পলেট নয়। আমি যদি C
কোনও টেমপ্লেটের পরিবর্তে নিয়মিত ক্লাসে পরিবর্তন করি তবে ত্রুটিটি চলে যায়; তবে আমি দেখতে পাচ্ছি না কেন যেহেতু প্রথম স্থানে একটি ত্রুটি হতে তন্ন তন্ন উচিত S
কিংবা f
উপর নির্ভর করে TC
।
অদ্ভুতভাবে যথেষ্ট, এমএসভিসি 19.22 এটি ঠিক জরিমানা করে।
বিঃদ্রঃ
ভোটিং আগে এর প্রতারিত যেমন বন্ধ করতে কোথায় এবং কেন আমি "টেমপ্লেট" এবং "typename" কিওয়ার্ড করা হবে? দয়া করে এটি একটি বিশেষ ক্ষেত্রে বিবেচনা করুন যেখানে S
প্রকৃতপক্ষে নির্ভরশীল নাম হলেও f
এটি প্রাসঙ্গিকভাবে নির্ভর করে না যদি না তারা বর্তমান ইনস্ট্যানটিশনের সদস্য হয়।