テンプレート関数を含む次のコードがあります。2 番目のパラメーターが列挙型であるこの関数を呼び出すと、テンプレートの特殊化が検出される場合と検出されない場合があります。
両方の場合で列挙型が同じ列挙型であること (たとえば、再定義がないこと) と、他のパラメーターが正しい値であることを確認しました。1 つのコンパイルが -Winline セットで行われることがわかりました (まだ変更しようとはしませんでした)。見る?
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)
{
....
}