के साथ टाइप पर is_constructible std::is_constructible
के लिए एक निजी या संरक्षित विनाशक के साथ अपेक्षित परिणाम क्या है?std :: गैर-सार्वजनिक विनाशक
उदाहरण के लिए, मैं अभी भी ढेर पर इस तरह के एक वस्तु केवल एक दोस्त यह मुक्त कर सकते हैं भले ही निर्माण कर सकते हैं:
#include <type_traits>
class Foo
{
friend void freeFoo(Foo*);
public:
Foo()
{}
private:
// Destructor is private!
~Foo()
{}
};
void freeFoo(Foo* f)
{
delete f; // deleting a foo is fine here because of friendship
}
int main()
{
Foo* f = new Foo();
// delete f; // won't compile: ~Foo is private
freeFoo(f); // fine because of friendship
if(!std::is_constructible<Foo>::value)
{
std::cout << "is_constructible failed" << std::endl;
}
}
is_constructible
के लिए अंतिम जाँच के दोनों जीसीसी और विजुअल C++ (gcc demo on coliru) पर असफल हो जायेगी।
क्या मानक द्वारा आवश्यक व्यवहार है? यदि हां, तो क्या यह जांचने का कोई तरीका है कि किस प्रकार का विशिष्ट निर्माता है, भले ही विनाशक पर पहुंच निर्दिष्टकर्ता हो?
संबंधित: https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/bPwd3UkZa6w – Caramiriel
@ कैमरिरिल दुर्भाग्यवश यह समस्या को सीधे संबोधित नहीं कर रहा है। 'is_destructible' स्पष्ट रूप से विनाशक की पहुंच पर निर्भर करता है, जो यहां मामला नहीं है। – Columbo