Почему шаблонная функция получает 2D-массив с одномерной ссылкой, когда обычная функция не

void fun (char (&a)[2])  // 1D reference
{}

template<typename T, int SIZE>
void funT (T (&a)[SIZE])  // 1D reference
{}

int main ()
{
  char c[2][2];  // 2D array
  fun(c);  // error
  funT(c); // ok !!!??
}

Я могу ожидать, что fun () выдаст ошибку, но почему funT () работает нормально! Есть ли ссылка в стандарте для такого поведения или Это ошибка на языке C ++?

5
задан iammilind 25 May 2011 в 11:41
поделиться