部分関数テンプレートが混乱して不要であると見なされ、C ++標準で許可されていない理由は、今では理解できたと思います。ただし、部分的な特殊化なしで次の関数を言い換えるのに役立つことを感謝します。FWIW、関数は非特殊クラスのメンバーです:
template <typename IMPL, typename RET>
RET call (functor <IMPL> func,
IMPL * impl)
{
return func.call (impl);
}
template <typename IMPL>
void call <IMPL, void_t> (functor <IMPL> func,
IMPL * impl)
{
func.call (impl);
}
ここでの問題は、関数の戻り型をオーバーロードできないことです。また、私が専門にしたい型名は関数パラメーターとして使用されていません-オーバーロードが役に立たないもう1つの理由です。はい、オーバーロードを強制するためにダミーパラメータを導入することはできますが、それは醜いですね。
最後に、なぜ一体がC ++の型を「無効」にしないのですか?それは物事をはるかに一貫性のあるものにするでしょう...しかし、私はおそらく全体像を見逃しています...