নিম্নলিখিত 2 টি অতিরিক্ত বোঝা বিবেচনা করুন
template<typename T>
bool test() {
return true;
}
template<template<typename ...> class T>
bool test() {
return false;
}
প্রথম জন নিয়মিত ক্লাসের জন্য কাজ করে, যখন দ্বিতীয়টি তাত্ক্ষণিকভাবে নয় এমন টেম্পলেটগুলির জন্য কাজ করে। এই ক্ষেত্রে:
std::cout<<test<int>()<<std::endl; <-- this yields 1
std::cout<<test<std::list>()<<std::endl; <--this yields 0
এখন নিম্নলিখিত টেমপ্লেট ফাংশন বিবেচনা করুন:
template<typename U>
bool templfun(){
struct A{
bool f(){
return test<A>(); // <-- this gives an error
}
};
return test<A>(); // <-- this is ok
}
জিসিসিতে এটি অস্পষ্ট ওভারলোড রেজোলিউশনের জন্য ত্রুটি দেয়, যখন ক্ল্যাং সংকলন করে। মজার বিষয় হল, দ্বিতীয় কলটি পরীক্ষার () ত্রুটিগুলি তৈরি করে না (এমনকি জিসিসিতেও)। তদুপরি, আমি template<typename U>
টেম্পলফুনের উপরে জিনিসটি সরিয়ে ফেললে, জিসিসি অভিযোগ করা বন্ধ করে দেয়।
এটি কি জিসিসির সাথে একটি বাগ বা এটি অবৈধ কোড?