2016-10-19 13 views
6

[class.copy]/12 में सी ++ 14:सी ++ 14 में [class.copy]/12 में नीचे दिए गए उभरे हुए पाठ का उद्देश्य क्या था?

एक प्रति/दसवीं कक्षा के लिए कदम निर्माता तुच्छ है अगर यह उपयोगकर्ता द्वारा प्रदान की नहीं है, अपने पैरामीटर प्रकार सूची बराबर पैरामीटर के लिए है -प्रकार-सूची एक अंतर्निहित घोषणा की है, और अगर

  • (12,1) - वर्ग - दसवीं कक्षा कोई आभासी कार्यों (10.3) और कोई आभासी आधार वर्गों (10.1), और
  • (12,2) है एक्स में अस्थिर-योग्य प्रकार का कोई गैर-स्थैतिक डेटा सदस्य नहीं है, और
  • (12.3) - निर्माता कॉपी/ले जाने के प्रत्येक प्रत्यक्ष आधार वर्ग subobject मामूली बात है करने के लिए चुना है, और
  • (12,4) - एक्स के प्रत्येक गैर स्थैतिक डेटा सदस्य उसके वर्ग प्रकार (या सरणी के है कि के लिए), कॉपी/स्थानांतरित करने के लिए चयनित निर्माता जो सदस्य छोटा है;

अन्यथा प्रतिलिपि/चालक कन्स्ट्रक्टर गैर-तुच्छ है।

मैं देख सकता हूं कि उपर्युक्त वाक्य एन 4606 में मिटा दिया गया था, लेकिन मुझे C++ Standard Core Language Active Issues, Revision 96 में कुछ भी नहीं मिला, ताकि उसे C++ 14 से हटाया जा सके।

+0

मुझे आश्चर्य है कि यह जोड़ा गया था क्योंकि निहित प्रति रचनाकार के पास 'एक्स :: एक्स (कॉन्स एक्स और)' या 'एक्स :: एक्स (एक्स और)' – NathanOliver

+0

हो सकता है शायद मैं इसे याद कर रहा हूं, लेकिन यदि यह है उपयोगकर्ता द्वारा प्रदत्त नहीं, इसकी पैरामीटर सूची अंतर्निहित से अलग कैसे हो सकती है? मुझे लगता है कि "उपयोगकर्ता द्वारा प्रदान नहीं किया गया" इसका मतलब बदलने के लिए था, लेकिन यह फिसल गया। – Quentin

उत्तर

6

यह CWG 2171 का परिणाम है। हटाया पाठ केवल एक मामले में अर्थ बदल:

struct X { 
    X(X&) = default; // not user-provided 
         // parameter-type-list differs from implicit declaration's X const& 
         // wasn't trivial before, is trivial now 
}; 

लेकिन या नहीं, यह वास्तव में invokable है, इसलिए मूल पाठ सामान्य के साथ असंगत समझा था की एक अलग सवाल है या नहीं, इस प्रति निर्माता तुच्छ है मानक का इरादा और इसलिए हटा दिया गया।

+0

'पैरामीटर-प्रकार-सूची निहित घोषणा के एक्स कॉन्स से अलग है और' लेकिन [class.copy]/8 के अनुसार, कॉपी कन्स्ट्रक्टर के लिए दो निहित घोषणाएं हैं: एक्स (कॉन्स एक्स और) और एक्स (एक्स और)। – Alexander

+0

@ एलेक्सेंडर यह नहीं है कि बुलेट कहता है। कॉपी कन्स्ट्रक्टर के लिए केवल एक ही निहित घोषणा है, और ऊपर दिए गए मेरे प्रकार के लिए यह 'एक्स (एक्स कॉन्स एंड) 'होगा। – Barry

+0

इसके अलावा, [class.copy]/8 एक स्पष्ट वर्ग के लिए प्रतिलिपि ctor के लिए निहित घोषणा के बारे में स्पष्ट नहीं है, जैसे 'struct X {};'। एक खाली अनुक्रम के लिए – Alexander

संबंधित मुद्दे