নিম্নলিখিত শ্রেণীর টেমপ্লেট দেওয়া হয়েছে:
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আপনি এর সংজ্ঞা (গুলি) সরিয়ে দিলে স্পষ্টতই (সঠিকভাবে) একটি অসম্পূর্ণ প্রকার হবে।