#include <type_traits>
struct A{};
struct B{};
template <typename T>
struct Foo
{
typename std::enable_if<std::is_same<T, A>::value>::type
bar()
{}
typename std::enable_if<std::is_same<T, B>::value>::type
bar()
{}
};
त्रुटि संदेश: cpp.sh परएसएफआईएनएई (enable_if) क्लास टेम्पलेट के सदस्य कार्यों के लिए क्यों काम नहीं करता है?
14:5: error: 'typename std::enable_if<std::is_same<T, B>::value>::type Foo<T>::bar()' cannot be overloaded 10:5:
error: with 'typename std::enable_if<std::is_same<T, A>::value>::type Foo<T>::bar()'
स्रोत। मैंने सोचा कि typename std::enable_if<std::is_same<T,?>::value>::type
दोनों एक ही समय में वैध नहीं हो सका।
संपादित
भावी पीढ़ी के लिए यहां मेरे संपादन @ KerrekSB के जवाब पर आधारित है - SFINAE केवल deduced टेम्पलेट तर्क
#include <type_traits>
struct A{};
struct B{};
template<typename T>
struct Foo
{
template<typename U = T>
typename std::enable_if<std::is_same<U,A>::value>::type
bar()
{
}
template<typename U = T>
typename std::enable_if<std::is_same<U,B>::value>::type
bar()
{
}
};
int main()
{
};
* SFINAE केवल deduced टेम्पलेट तर्क के लिए काम करता है * ... यही कारण है कि कुंजी है !!!!! धन्यवाद गुच्छा @ केरेक। बीटीडब्ल्यू, मेरी मूल पोस्ट MWE है। – Olumide
@ ओलुमाइड: हां, केवल प्रतिस्थापन विफलता जो कटौती के परिणामस्वरूप त्रुटियां नहीं हैं। स्पष्ट रूप से अनुरोध किए गए प्रतिस्थापन हार्ड त्रुटि के रूप में विफल हो जाते हैं। (इस मामले के लिए एक एमएफई पर्याप्त है!) –
क्या इस तरह एक ओवरलोडेड कन्स्ट्रक्टर है? – Brent