std::is_constructible
প্রাইভেট কনস্ট্রাক্টরদের পরিচালনা করে কোন বিধিগুলি ? নিম্নলিখিত কোড দেওয়া:
#include <iostream>
class Class {
private:
Class() { }
};
template <typename T>
class Test {
public:
static void test() {
std::cout
//<< std::is_constructible<Class>::value
<< std::is_constructible<T>::value
<< std::endl;
}
};
int main() {
Test<Class>::test();
}
এই প্রিন্টগুলি 0
( আইডোন ) অর্থাত্ T
ডিফল্ট গঠনযোগ্য নয়।
মন্তব্য করা লাইনটি কমেন্ট না করে, এটি মুদ্রণ করে 11
( আদর্শ ), সুতরাং T
সুস্পষ্টভাবে ডিফল্ট গঠনযোগ্য হয়ে ওঠে।
উভয় ফলাফলকে সমর্থন করার জন্য আমি যুক্তি খুঁজে পেতে পারি, তবে আমি বুঝতে পারি না যে মন্তব্য করা লাইনের সাথে কীভাবে দ্বিতীয়টির ফলাফল পরিবর্তন হয়। এটি কি কোনওভাবে ইউবিকে ডাকছে? এটি কি একটি সংকলক বাগ? নাকি std::is_constructible
আসলেই বেমানান?
::value
সংস্করণটি এর আগে আগতদের আউটপুট পরিবর্তন করতে সক্ষম: Godbolt.org/z/zCy5xU মন্তব্য করা লাইনটি Uncomment করে এবং সমস্তটি জিসিসিতে 1: s হয়ে যায়।
false
তবে ফাংশন টেমপ্লেটটি যদি কোনও সমস্যা না করে তা হঠাৎ করে ফিরে আসে true
: Godbolt.org/z/zqxdk2
00