मैंने नीचे दिए गए कोड को यह पता लगाने के लिए लिखा है कि किसी प्रकार का स्थिर सदस्य चर है या नहीं। दुर्भाग्य से, यह हमेशा वापस आ रहा है कि चर मौजूद नहीं है।अस्वीकरण का उपयोग कर स्थिर सदस्य के लिए sfinae चेक
क्या कोई मुझे बता सकता है कि मैं गलत कहां जा रहा हूं? मैं जी ++ 4.7.1 का उपयोग कर रहा हूँ।
std::is_same<bool, decltype(bar::is_baz)>::value == false
फिर अपने SFINAE हमेशा असफल रहा था:
#include <iostream>
#include <utility>
#include <type_traits>
using namespace std;
template <class T>
class has_is_baz
{
template<class U,
typename std::enable_if<std::is_same<bool, decltype(U::is_baz)>::value>::type...>
static std::true_type check(int);
template <class>
static std::false_type check(...);
public:
static constexpr bool value = decltype(check<T>(0))::value;
};
struct foo { };
struct bar
{
static constexpr bool is_baz = true;
};
int main()
{
cout << has_is_baz<foo>::value << '\n';
cout << has_is_baz<bar>::value << '\n';
}
यह स्थिर होने के लिए 'U :: is_baz' की आवश्यकता नहीं है। एक 'संरचना ए {बूल is_baz; }; 'बस काम भी करेगा। –
@ जोहान्सचैब-लिटब आप सही हैं। ऐसा लगता है कि यह अब काम करता है। – mfontanini