निम्नलिखित सरल कोड में newest Visual Studio compiler (MSVC 2015 अपडेट 2) एक त्रुटि पैदा करता है:सी ++ एक डिफॉल्ट की विशेष सदस्य कार्यों के कई संस्करण - MSVC में त्रुटि 2015
struct Foo
{
template<typename ... Args, typename = std::enable_if_t<sizeof...(Args) != 0> >
Foo(Args ...) {}
Foo() = default; // error
//Foo() {} //this works!
};
त्रुटि संदेश
हैत्रुटि C2580: 'फू :: फू (शून्य)': एक डिफॉल्ट की विशेष सदस्य कार्यों के कई संस्करण की अनुमति नहीं है
gcc मैं स्वीकार करता है बिना किसी समस्या के टी।
यह मुझे एक स्पष्ट बग के रूप में लगता है (इस अर्थ में कि यह मानक द्वारा समर्थित नहीं है)। कोई अन्य विचार?
केवल थोड़ा सा संबंधित: मैं वीएस2015 के यूपीडी 2 के साथ इतना असम्पीडित हूं, यह लगभग हंसने योग्य है, क्या यह उन चीजों के लिए नहीं था जो उस स्टीमिंग ढेर के परिणामस्वरूप @ काम को तोड़ चुके हैं। संबंधित: क्लैंग इसे कोई समस्या नहीं खाती है। – WhozCraig
मुझे लगता है कि यह दो चरण लुकअप की कमी के कारण है? ओह, मैं मजाक कर रहा हूँ मुझे कोई जानकारी नहीं है। मैंने कुछ समय पहले _real_ स्टीमिंग ढेर (यानी सी ++) में विकास के बाद रोक दिया था। –
मुझे एक बग की तरह लग रहा है। यदि आप किसी कामकाज में रूचि रखते हैं, तो आप इसे 'टेम्पलेट <टाइपनाम आर्म, टाइपनाम ... Args> Foo (Arg, Args ...) बना सकते हैं;' यह संभवतः यह सुनिश्चित करने का एक और सरल तरीका है कि टेम्पलेट कन्स्ट्रक्टर लेता है कम से कम एक तर्क। –