C ++ шаблон метапрограммирования статическая проверка типов

Я не могЯ не могу найти ответ на мою проблему, поэтому я публикую его как вопрос. Я делаю небольшой пример, чтобы объяснить это:

enum STORAGE_TYPE
{
    CONTIGUOUS,
    NON_CONTIGUOUS
};

template 
class Data
{
    public:
        void a() { return 1; }
};

// partial type specialization
template 
class Data
{
    public:
        void b() { return 0; }
};

// this method should accept any Data including specializations…
template 
void func(Data &d)
{
    /* How could I determine statically the STORAGE_TYPE? */
    #if .. ?? 
        d.a();
    #else
        d.b();
    #endif      
}


int main()
{
    Data d1;
    Data d2;

    func(d1);
    func(d2);

    return 0;
}

Пожалуйста, обратите внимание, что (1) Я не хочу специализацию "FUNC», как это может решить эту проблему, но я просто хочу иметь 1 общий метод "FUNC» с внутренней статикойесли" условия выполнения кода.(2) и я бы предпочел решение со стандартным C ++ (не C ++ 0x или boost).

Ответы на вопрос(2)

Ваш ответ на вопрос