নিম্নলিখিত শ্রেণীর টেমপ্লেট দেওয়া হয়েছে:
template<typename T>
struct Outer
{
struct Inner;
auto f(Inner) -> void;
};
আমরা Inner
প্রতিটি বিশেষজ্ঞের জন্য পৃথকভাবে সংজ্ঞায়িত করি Outer
:
template<>
struct Outer<int>::Inner {};
template<>
struct Outer<double>::Inner {};
এবং তারপরে f
সমস্ত বিশেষত্বের জন্য একবার সদস্য ক্রিয়া সংজ্ঞায়িত করুন Outer
:
auto Outer<T>::f(Inner) -> void
{
}
তবে কলং অভিযোগ (9.0.0):
error: variable has incomplete type 'Outer::Inner'
auto Outer<T>::f(Inner) -> void
^
এর Inner
অন্যান্য সমস্ত বিশেষত্বের জন্য একটি সংজ্ঞা প্রদান করে আমরা সংকলক ত্রুটি থেকে রক্ষা পেতে পারি Outer
:
template<typename T>
struct Outer<T>::Inner {};
বা f
প্রতিটি বিশেষজ্ঞের জন্য পৃথকভাবে সংজ্ঞায়িত করে :
template<>
auto Outer<int>::f(Inner) -> void
{
}
template<>
auto Outer<double>::f(Inner) -> void
{
}
জিসিসি এবং এমএসভিসি উভয়ই প্রাথমিক কোডটি গ্রহণ করে, যা প্রশ্নটি উত্থাপন করে; এটি কি একটি কলং বাগ বা এটি তিনটির মধ্যে একমাত্র কার্যকর প্রয়োগ?
Inner
এবং প্রতিটি বিশেষীকরণের জন্য পৃথকভাবে সংজ্ঞাf
সংকলনের ত্রুটি সমাধান করে resolve
Inner
বক্তব্যটি ছিল প্রতিটি Outer
প্রদত্ত বিশেষায়নের সংজ্ঞা থাকা সত্ত্বেও এটি একটি অসম্পূর্ণ প্রকার হিসাবে রিপোর্ট করা হচ্ছে। Inner
আপনি এর সংজ্ঞা (গুলি) সরিয়ে দিলে স্পষ্টতই (সঠিকভাবে) একটি অসম্পূর্ণ প্রকার হবে।