#include <iostream>
#include <utility>


using namespace std;

// fix for gcc:
// see http://stackoverflow.com/a/25833474/3087952

//template< class ... > using void_t = void;

template< class ... >
struct make_void {
	typedef void type;
};

template< class ... T >
using void_t = typename make_void< T... >::type;

template< class , class = void >
struct has_member : false_type
{ };

// specialized as has_member< T , void > or discarded (sfinae)
template< class T >
struct has_member< T , void_t< decltype( T::member ) > > : true_type
{ };

class A {
	public:
    	int member;
};

class B {
};

int main() {
	
	cout << "A has 'member' = " << boolalpha << has_member< A >::value << endl;
	cout << "B has 'member' = " << boolalpha << has_member< B >::value << endl;
	
	
	return 0;
}