//User types
struct field_t{};
struct other_t{};
struct StructT{other_t field;field_t other;};
//Implementation detail
template<typename T,typename FIELD_T>
struct type_has_field{
struct Fallback {FIELD_T field;};
struct Derived:T,Fallback{};
template<typename C, C> struct ChT;
template<typename C> static char (&f(ChT<FIELD_T Fallback::*, &C::field>*))[1];
template<typename C> static char (&f(...))[2];
static bool const value = sizeof(f<Derived>(0)) == 2;
};
//Experiment
static_assert(
false==type_has_field<StructT,field_t>::value,
"field_t StructT::field - should not exist"
);
int main(){return 0;}
Ly9Vc2VyIHR5cGVzCnN0cnVjdCBmaWVsZF90e307CnN0cnVjdCBvdGhlcl90e307CnN0cnVjdCBTdHJ1Y3RUe290aGVyX3QgZmllbGQ7ZmllbGRfdCBvdGhlcjt9OwovL0ltcGxlbWVudGF0aW9uIGRldGFpbAp0ZW1wbGF0ZTx0eXBlbmFtZSBULHR5cGVuYW1lIEZJRUxEX1Q+CnN0cnVjdCB0eXBlX2hhc19maWVsZHsKICBzdHJ1Y3QgRmFsbGJhY2sge0ZJRUxEX1QgZmllbGQ7fTsKICBzdHJ1Y3QgRGVyaXZlZDpULEZhbGxiYWNre307CiAgdGVtcGxhdGU8dHlwZW5hbWUgQywgQz4gc3RydWN0IENoVDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBDPiBzdGF0aWMgY2hhciAoJmYoQ2hUPEZJRUxEX1QgRmFsbGJhY2s6OiosICZDOjpmaWVsZD4qKSlbMV07CiAgdGVtcGxhdGU8dHlwZW5hbWUgQz4gc3RhdGljIGNoYXIgKCZmKC4uLikpWzJdOwoKICBzdGF0aWMgYm9vbCBjb25zdCB2YWx1ZSA9IHNpemVvZihmPERlcml2ZWQ+KDApKSA9PSAyOwp9OwovL0V4cGVyaW1lbnQKCnN0YXRpY19hc3NlcnQoCiAgZmFsc2U9PXR5cGVfaGFzX2ZpZWxkPFN0cnVjdFQsZmllbGRfdD46OnZhbHVlLAogICJmaWVsZF90IFN0cnVjdFQ6OmZpZWxkIC0gc2hvdWxkIG5vdCBleGlzdCIKKTsKCmludCBtYWluKCl7cmV0dXJuIDA7fQ==