確かに、 (ここis_specialization_of
からリンクを取得して修正しました)を使用します:
template<typename Type, bool IsTuple = is_specialization_of<Type, std::tuple>::value>
bool f(Type* x);
問題は、しかし、あなたは本当にそれを望んでいますか?通常、型がタプルかどうかを知る必要がある場合は、タプルの特別な処理が必要であり、それは通常、そのテンプレート引数に関係しています。そのため、オーバーロードされたバージョンに固執することをお勧めします。
編集:特殊な部分のみが必要であると述べたので、オーバーロードをお勧めしますが、小さな特別な部分のみに限定してください:
template<class T>
bool f(T* x){
// common parts...
f_special_part(x);
// common parts...
}
と
template<class T>
void f_special_part(T* x){ /* general case */ }
template<class... Args>
void f_special_part(std::tuple<Args...>* x){ /* special tuple case */ }