Неоднозначная частичная специализация шаблона

У меня есть класс черт, который мне нужно специализировать (и частично специализировать) много раз.

Некоторые частичные специализации перекрываются:

template< typename T > struct C { };
template< typename T1, typename T2 > struct TRAIT { };

template< typename T > struct TRAIT< T, T > { };
template< typename T1, typename T2 > struct TRAIT< C<T1>, C<T2> > { };

int main( ) {
    // ERROR! could be both TRAIT<T,T>   [with T = C<int>]
    //                  and TRAIT<T1,T2> [with T1 = T2 = int]
    TRAIT< C<int>, C<int> > foo;
    return 0;
};

Как я должен получить такой же результат с рабочим кодом?

Я сошел с ума от enable_if и is_same , я даже больше не уверен, что это правильный путь ...

6
задан Lightness Races with Monica 7 January 2012 в 17:31
поделиться