それってできるの? と思ったのでやってみたら

できた。特別仕様ごとに継承先を付け替えることができる。

main.cpp と解説

#include <iostream>
#include <type_traits> 


struct X{};


template < typename T > 
struct Base : std :: false_type {};


template <> 
struct Base< X > : std :: true_type {};


int main ( void ){

  std :: cout << Base< int > :: value << std :: endl;
  std :: cout << Base< X >   :: value << std :: endl;


  return 0;
}
template < typename T > 
struct Base : std :: false_type {};

まずは汎用型を定義、こちらは std :: false_type を継承している。

template <> 
struct Base< X > : std :: true_type {};

しかし X 型に関しては std :: true_type を継承する。

std :: cout << Base< int > :: value << std :: endl;
std :: cout << Base< X >   :: value << std :: endl;

で、それぞれの Base<...> :: value を表示させてみる。

出力結果

0
1