Como detectar se existe uma variável de membro específica na classe?

Para criar a função de modelo de algoritmo, preciso saber se x ou X (e y ou Y) na classe que é um argumento de modelo. Pode ser útil ao usar minha função para CPFC classe MFC ou GDI + PointF classe ou alguns outros. Todos eles usam diferentes x neles. Minha solução pode ser reduzida para o seguinte código:

<code>
template<int> struct TT {typedef int type;};
template<class P> bool Check_x(P p, typename TT<sizeof(&P::x)>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<sizeof(&P::X)>::type b = 0) { return false; }

struct P1 {int x; };
struct P2 {float X; };
// it also could be struct P3 {unknown_type X; };

int main()
{
    P1 p1 = {1};
    P2 p2 = {1};

    Check_x(p1); // must return true
    Check_x(p2); // must return false

    return 0;
}
</code>

Mas ele não compila no Visual Studio, enquanto compila no GNU C ++. Com o Visual Studio, eu poderia usar o seguinte modelo:

<code>
template<class P> bool Check_x(P p, typename TT<&P::x==&P::x>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<&P::X==&P::X>::type b = 0) { return false; }
</code>

Mas não compila no GNU C ++. Existe solução universal?

UPD: As estruturas P1 e P2 aqui são apenas, por exemplo. Pode haver classes com membros desconhecidos.

P.S. Por favor, não publique aqui as soluções C ++ 11 porque elas são óbvias e não são relevantes para a questão.

questionAnswers(10)

yourAnswerToTheQuestion