ऐसे कौन से नियम हैं जिनके द्वारा 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
( ideone ), यानी, T
डिफ़ॉल्ट रूप से रचनात्मक नहीं है।
टिप्पणी की गई रेखा को हटाकर , यह प्रिंट करता है 11
( आइडोन ), इसलिए अचानकT
निर्माण डिफ़ॉल्ट हो जाता है।
मुझे दोनों परिणामों का समर्थन करने का तर्क मिल सकता है, लेकिन मुझे समझ नहीं आ रहा है कि टिप्पणी की गई पंक्ति सहित दूसरे के परिणाम को कैसे बदला जाए। क्या यह किसी तरह यूबी का आह्वान कर रहा है? क्या यह एक कंपाइलर बग है? या std::is_constructible
वास्तव में यह असंगत है?
::value
संस्करण इससे पहले आने वाले लोगों के आउटपुट को बदलने में भी सक्षम है: Godbolt.org/z/zCy5xU टिप्पणी लाइन को अनकम्फर्ट करें और सभी gcc में 1: s हो जाए।
false
लेकिन यदि फ़ंक्शन टेम्प्लेट अनियंत्रित है , तो यह अचानक वापस आ जाता है true
: godbolt.org/z/zqxdk2
00