P0091R3 ("Template argument deduction for class templates") हाल ही में gcc
trunk में जोड़ा गया था और wandbox पर परीक्षण किया जा सकता है।कक्षा टेम्पलेट्स के लिए सी ++ 17 का "टेम्पलेट तर्क कटौती" स्थानीय प्रकारों को कम कर सकता है?
कुछ मैं मन में था इसे का उपयोग कोड के बहुत कुछ पंक्तियों में एक "गुंजाइश गार्ड" को लागू करने की संभावना थी:
scope_guard _([]{ cout << "hi!\n" });
मैं implementing it on wandbox कोशिश की ...
template <typename TF>
struct scope_guard : TF
{
scope_guard(TF f) : TF{f} { }
~scope_guard() { (*this)(); }
};
int main()
{
scope_guard _{[]{}};
}
... लेकिन संकलन निम्न त्रुटि के साथ विफल रहा:
prog.cc:6:5: error: 'scope_guard(TF)-> scope_guard<TF> [with TF = main()::<lambda()>]', declared using local type 'main()::<lambda()>', is used but never defined [-fpermissive]
scope_guard(TF f) : TF{std::move(f)} { }
^~~~~~~~~~~
मैं तो using a non-lambda local type की कोशिश की, और एक ही त्रुटि मिली।
int main()
{
struct K { void operator()() {} };
scope_guard _{K{}};
}
बाद में, I tried a non-local type, और यह उम्मीद के रूप में काम किया।
struct K { void operator()() {} };
int main()
{
scope_guard _{K{}};
}
इस इस तरह से कि स्थानीय प्रकार निष्कर्ष निकाला होने से रोकती है में बनाया गया चित्रित किया है?
या क्या यह सुविधा के gcc
के वर्तमान कार्यान्वयन में एक दोष है?
ऐसा लगता है कि आप पहले से ही बग रिपोर्ट पर पाए गए हैं और टिप्पणी की है। – Barry