मैं एक टेम्पलेट फ़ंक्शन को कोड करने का प्रयास कर रहा हूं जो एक एडीएल का उपयोग करता है जो get
को संरचना/श्रेणी (tuple
-esque) के सदस्यों को लाने के लिए हल करता है।क्यों एडीएल std :: के साथ सही फ़ंक्शन को हल नहीं करता है
#include <iostream>
#include <utility>
#include <tuple>
int main() {
auto tup = std::make_tuple(1, 2);
std::cout << get<0>(tup) << std::endl;
}
मैं क्योंकि जो संरचित बाइंडिंग प्रस्ताव (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf §11.5.3) कैसे get
struct से तत्वों को लाने के लिए प्रयोग किया जाता है के बारे में कहते हैं की यह कर रहा हूं। यह कहता है कि गैर-सदस्य get
का उपयोग संरचनाओं के भीतर तत्वों को लाने के लिए किया जाता है।
मैं मान लिया है कि कोड से ऊपर, संकलन होगा क्योंकि ADL कारण होगा get
समारोह std
नाम स्थान में लिए देखा जा करने के लिए (क्योंकि यह तर्क है प्रकार std::tuple<int, int>
, जो std
में है की है), जहां यह पाया की जाएगी। लेकिन, मुझे एक त्रुटि मिलती है। क्या कोई यहां सही दृष्टिकोण की व्याख्या कर सकता है और उपरोक्त कोड क्यों काम नहीं करता है? इस मामले में एडीएल कैसे हो सकता है?
बहुत दिलचस्प! मुझे आश्चर्य है कि, इस अपरिभाषित कार्य को शुरू करने से संभावित रूप से किसी अन्य समस्या का कारण बनता है? संघर्ष या पसंद की तरह? – Curious
@ क्रूर अगर यह पसंद किया जा रहा है तो यह होगा। मेरा मतलब है, वास्तव में ऐसा मत करो - मैंने इसे व्याख्यात्मक उद्देश्यों के लिए वहां रखा है। – Barry
हम्म, क्या कोई तरीका है कि मैं एडीएल को मजबूर कर सकता हूं? मैंने 'टेम्पलेट' कीवर्ड की कोशिश की लेकिन निश्चित रूप से यह काम नहीं करता .. – Curious