0
そのテンプレート;-)次のテンプレートメンバ関数とCRTPクラスを考える:マッチ固定サイズの配列
template<typename T>
struct base
{
...
};
struct derived : public base<derived>
{
...
};
struct some_class
{
template<typename T>
void match(base<T>* array, size_t count)
{
...
};
template<typename T, size_t count>
void match(base<T> (&array)[count])
{
...
};
};
なぜコンパイラは、第二の機能の一致を見つけることができません。
derived array[10];
some_class foo;
foo.match(array, 10); // works fine
foo.match(array); // Error: no matching function for call to some_class::match(derived array[10])
私は、2番目のテンプレート関数がコンパイル時のfixde配列サイズを差し引くことができると思いますが、明らかに関数は考慮されていません。どうして?
おかげ
編集:妙に以下のバージョンは罰金コンパイル:
template<typename T, size_t count>
void match(T (&array)[count])
{
...
};
だから私はいくつかの点で元のバージョンは、私はちょうど表示されていない何らかの理由で除外されることを疑います。