テンプレート関数を含む次のコードがあります。 2番目のパラメータを列挙型としてこの関数を呼び出すと、テンプレートの特殊化が検出され、場合によってはそうではない場合もあります。C++で列挙型と一致するテンプレート関数のバリエーション
enumがどちらの場合も同じ列挙型(再定義がないなど)で、他のパラメータが正しい値を持っていることを確認したところ、-Winlineを使って1つのコンパイルが行われていました)何を見なければならない?
class A {
public:
template <typename T>
int f(uint32_t id, T const& t, bool cond);
...
};
template <typename T>
int A::f(uint32_t id, T const& t, bool cond)
{
...
}
template <>
inline int A::f<int>(uint32_t, int const& t, bool cond)
{
....
}
あなたはクラス内で特殊化を宣言せずにそのクラスの外側の関数テンプレートを特化することができていますか? –
@Jeremiah Willcock-はい、これは合法です。あなたはそれを完全に専門化することだけが許されます。なぜ標準化委員会がこれを合法化することにしたのか分かりません。 – templatetypedef
@templatetypedef:それは本当に奇妙です。私がコードに書いた修正を元に戻しましたか(特に専門分野の署名)? –