2017-09-07 24 views
15

[temp.deduct.guide/3] के अनुसार:नेस्टेड टेम्पलेट वर्ग के लिए कटौती मार्गदर्शिका कैसे प्रदान करें?

(...) एक कटौती-गाइड इसी वर्ग टेम्पलेट के रूप में एक ही दायरे में घोषित किया जाएगा और, एक सदस्य वर्ग टेम्पलेट के लिए, एक ही उपयोग के साथ। (...)

लेकिन उदाहरण नीचे [gcc] और [clang] दोनों में संकलित करने के लिए प्रतीत नहीं होता। नेस्टेड टेम्पलेट वर्ग के लिए कटौती गाइड की सही सिंटैक्स

#include <string> 

template <class> 
struct Foo { 
    template <class T> 
    struct Bar { 
     Bar(T) { } 
    }; 
    Bar(char const*) -> Bar<std::string>; 
}; 

int main() { 
    Foo<int>::Bar bar("abc"); 
    static_cast<void>(bar); 
} 

क्या है? या शायद यह सही है लेकिन अभी तक संकलक द्वारा समर्थित नहीं है?

#include <string> 

template <class T> 
struct Bar { 
    Bar(T) { } 
}; 
Bar(char const*) -> Bar<std::string>; 

int main() { 
    Bar bar("abc"); 
    static_cast<void>(bar); 
} 
+0

जीसीसी में यह एक बग है, जिसमें ऐसा लगता है कि आप एक समारोह घोषित करते हैं। –

+0

@ सोप्रप्रोग्रामड्यूड मुझे यकीन नहीं है कि यह सही वाक्यविन्यास है या नहीं - मानक में कोई समान उदाहरण नहीं है, फिर भी यह स्थिति का उल्लेख करता है ... –

+0

नेस्टेड टेम्पलेट कटौती गाइड काम करता है यदि अभिभावक वर्ग टेम्पलेट नहीं किया गया है .... – AndyG

उत्तर

11

[temp.deduct.guide] वाक्य में शामिल हैं::


इसी प्रकार के वाक्य रचना लेकिन नेस्टेड वर्ग के बिना दोनों जीसीसी और बजना में ठीक संकलित

एक कटौती-गाइड ही में घोषित किया जाएगा संबंधित वर्ग टेम्पलेट के रूप में दायरा और, एक सदस्य वर्ग टेम्पलेट के लिए, उसी पहुंच के साथ।

यह पता चलता है कि अपने उदाहरण से काम करना चाहिए - कटौती गाइड सदस्य वर्ग टेम्पलेट्स के लिए स्पष्ट रूप से समर्थन कर रहे हैं, जब तक वे एक ही दायरे और एक्सेस (जो वर्ग गुंजाइश और public होगा में घोषित कर रहे हैं - की जाँच करें और जांच)।

यह gcc bug 79501 (रिचर्ड स्मिथ द्वारा दायर) है।

+0

रिचर्ड द्वारा दायर उदाहरण यद्यपि संकलन में संकलित लगता है ... –

+2

@WF आपकी बाहरी कक्षा एक वर्ग टेम्पलेट है, इस बग में उदाहरण सरल है। एक llvm बग फाइल करना चाहिए। – Barry

+0

हाँ यह निश्चित रूप से सुझाव देता है कि वाक्यविन्यास सही होना चाहिए। मैं फिर एक बग फाइल करने की कोशिश करूंगा ... –

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