constexpr
functions शामिल करने के लिए नहीं जा सकते:एक कॉन्स्टेक्स फ़ंक्शन में अनुमत क्या है?
गैर शाब्दिक प्रकार
लेकिन इस सवाल का जवाब एक लैम्ब्डा एक में परिभाषित किया गया है में से एक चर की एक परिभाषा: https://stackoverflow.com/a/41616651/2642059
template <typename T>
constexpr auto make_div(const T quot, const T rem)
{
return [&]() {
decltype(std::div(quot, rem)) result;
result.quot = quot;
result.rem = rem;
return result;
}();
}
और मेरी टिप्पणी में मैंने div_t
को एक में परिभाषित किया है: How can I Initialize a div_t Object?
template <typename T>
constexpr decltype(div(T{}, T{})) make_div(const T quot, const T rem)
{
decltype(div(T{}, T{})) x{};
x.quot = quot;
x.rem = rem;
return x;
}
"गैर-शाब्दिक प्रकार के चर के परिभाषा" के निषेध से क्या मतलब है?
विजुअल स्टूडियो 2015 div_t
की मेरी परिभाषा की अनुमति नहीं देगा, लेकिन मुझे यह बकवास लगता है कि यह लैम्ब्डा में इस तरह के अवैध व्यवहार को लपेटने और इसे निष्पादित करने की अनुमति होगी। मैं जानना चाहता हूं कि अगर किसी भी कंपाइलर div_t
परिभाषा के संबंध में सही तरीके से व्यवहार कर रहे हैं।
सी ++ भाषा का कौन सा संस्करण? 2011 से आवश्यकताओं को काफी कम किया गया था। – rubenvb
@ रूबेनवब अच्छा सवाल, मैंने संपादित किया है। लेकिन सी ++ 14। –
एक लैम्ब्डा अभिव्यक्ति एक अभिव्यक्ति है, एक चर परिभाषा नहीं है। लेकिन सी ++ 17 तक, एक लैम्ब्डा अभिव्यक्ति एक [निरंतर अभिव्यक्ति] (http://en.cppreference.com/w/cpp/language/constant_expression) में प्रकट नहीं हो सकती है। दरअसल, [जब संदर्भ को निरंतर अभिव्यक्ति की आवश्यकता होती है, तो एमएसवीसी शिकायत करेगा] (http://rextester.com/ZBRLBR12534)। – cpplearner