c++ - Is a program, that doesn't use a default argument that would fail to bind to a reference parameter, legal? -
निम्नलिखित पर विचार करें: #include & lt; iostream & gt; टेम्पलेट & lt; typename T & gt; Struct Foo {Foo (टी v = {}): var (v) {} टी var; }; Int main () {// फू & lt; int & gt; च; // int x = 42 को संकलित नहीं कर सकता; फू & LT; पूर्णांक में & amp; & gt; f (x); Std :: cout & lt; & lt; f.var; } यह जीसीसी 4.8 में बना और सफलतापूर्वक चलाता है, लेकिन क्या यह कड़ाई से कानूनी है? T v = {} है T = int & amp; के लिए अमान्य है, लेकिन इस डिफ़ॉल्ट तर्क का उपयोग नहीं किया जाता है। मानक में पा सकते हैं केवल प्रासंगिक भाषा स्पष्ट रूप से यह स्पष्ट नहीं करती है कि यह कार्यक्रम मान्य नहीं है; विभिन्न तरीकों से इस विषय को छूने के बावजूद निम्न में से कोई भी पूरी तरह से प्रासंगिक नहीं है: [C ++ 11: 8.3.6 / 1]: यदि कोई प्रारंभिक-खंड पैरामीटर-घोषणा में निर्दिष्ट किया गया है यह प्रारंभिक-क्लॉज एक डिफ़ॉल्ट तर्क के रूप में उपयोग किया जाता है डिफ़ॉल्ट तर्कों का उपयोग कॉल में किया जाएगा, जहां अनुगामी तर्क गुम हैं। [C ++ 11: 8.3.6 / 5]: एक ड...