आज मैं क्लैंग के सी ++ 17 समर्थन पृष्ठ को पढ़ रहा था। मैंने कुछ अजीब देखा है। सुविधा संगत तर्कों के लिए मिलान टेम्पलेट टेम्पलेट पैरामीटर (P0522R0) को आंशिक के रूप में चिह्नित किया गया है, क्योंकि यह स्विच के माध्यम से सक्रिय होना चाहिए। उनकी टिप्पणी says:P0522R0 ब्रेकिंग कोड कैसा है?
एक दोष रिपोर्ट करने के लिए संकल्प होने के बावजूद, इस सुविधा बजना 4 में सभी भाषा संस्करण में डिफ़ॉल्ट रूप से अक्षम है, और ध्वज के साथ स्पष्ट रूप से सक्रिय किया जा सकता -frelaxed-टेम्पलेट टेम्पलेट आर्ग मानक में परिवर्तन टेम्पलेट आंशिक क्रम के लिए एक समान परिवर्तन की कमी है, जिसके परिणामस्वरूप उचित और पूर्व-मान्य कोड के लिए अस्पष्टता त्रुटियां होती हैं। इस मुद्दे को जल्द ही सुधारने की उम्मीद है।
इस सुविधा को सक्रिय करते समय किस प्रकार की संरचना टूट जाती है? यह कोड क्यों तोड़ सकता है और कैसे? क्योंकि foo
केवल एक टेम्पलेट पैरामीटर के साथ एक टेम्पलेट लेता है, और न दो,
template<template<typename> typename>
struct Foo {};
template<typename, typename = void>
struct Bar {};
Foo<Bar> unused;
दोष संकल्प के बिना
, unused
हैं बीमार का गठन किया जा:
ओह मैं देखता हूं। आपके उदाहरण में, मुझे उम्मीद है कि 'foo' के दूसरे संस्करण को उठाया जाएगा। –
@ गुइलाउम हां, क्योंकि यह एक बेहतर मैच है। लेकिन मानक के लिए आंशिक क्रम में पाठ नहीं है :( – Rakete1111
मैंने इस बारे में SO पर कुछ प्रश्न देखे हैं, और यहां तक कि इसे स्वयं भी चलाते हैं। मुझे लगता है कि सबसे आम परिदृश्य यह है कि कोई कंटेनर लपेट रहा है , विशेष रूप से 'std :: vector', और वे भूल जाते हैं कि इसमें एक आवंटक भी है, इसलिए आप [this] (https://wandbox.org/permlink/lYy8DNiF61ZH4Fmp) जैसे कोड के साथ समाप्त होते हैं – AndyG