его шаблоны снова ;-) Учитывая следующие функции-члены шаблона и класс 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])
Я ожидаю, что вторая функция шаблона может вычесть размер массива fixde во время компиляции, но, очевидно, эта функция не рассматривается.Почему?
Спасибо
Редактировать: странно следующая версия компилируется нормально:
template<typename T, size_t count>
void match(T (&array)[count])
{
...
};
Так что я подозреваю, что в какой-то момент оригинальная версия по какой-то причине исключается.просто не вижу.