#include <iostream>

using namespace std;


class foo
{
public:
	int bar;
};

template <class C, C>
class Check;

template <class T, class Enable = void>
class enable_if_has_bar
{};

template <class T>
class enable_if_has_bar<T, Check <decltype(&T::bar),&T::bar>>
{
public:
	typedef decltype(static_cast<T*>(0)->*static_cast<decltype(&T::bar)>(0)) type;
};

template <class T>
typename enable_if_has_bar<T>::type ReturnBar (const T& value)
{
	return value.bar;
}

int main ()
{
	foo foobar;
	foobar.bar = 42;

	cout << ReturnBar(foobar) << endl;
	return 0;
}