Jak wykryć, czy w klasie jest określona zmienna składowa?

Aby utworzyć funkcję szablonu algorytmu, muszę wiedzieć, czy x lub X (oraz y lub Y) w klasie, która jest argumentem szablonu. Może to być przydatne podczas używania mojej funkcji dla klasy MFC CPoint lub klasy GDI + PointF lub niektórych innych. Wszystkie używają w nich różnych x. Moje rozwiązanie można zredukować do następującego kodu:

<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>

Ale nie kompiluje się w Visual Studio, podczas kompilacji w GNU C ++. W Visual Studio mogłem użyć następującego szablonu:

<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>

Ale nie kompiluje się w GNU C ++. Czy istnieje uniwersalne rozwiązanie?

UPD: Struktury P1 i P2 są tutaj tylko na przykład. Mogą istnieć dowolne klasy z nieznanymi członkami.

P.S. Proszę nie publikować tutaj rozwiązań C ++ 11, ponieważ są one oczywiste i nie mają związku z pytaniem.

questionAnswers(10)

yourAnswerToTheQuestion