Билд 1966, 64 бит. В данном примере компилятор выдаёт ошибку о неоднозначности, хотя тут всё однозначно, ведь массив long[] не может преобразовываться в int[].
ошибка справедлива. подстановка не учитывает преобразования и не должна. так что у шаблона на выбор два равнозначных варианта подстановки.
template<typename T, typename T1> void f(T &data[], T1 val) { } void OnInit() { long arr[]; int a; f(arr, a); // template parameter ambiguous, could be 'long' or 'int' }
или
template<typename T> void f(T &data[], T val) { } void OnInit() { long arr[]; long a; f(arr, a); // template parameter ambiguous, could be 'long' or 'int' }
Да, похоже я ошибся, TheExpert оказался прав. C++ тоже ошибку выдаёт в аналогичной ситуации.
Да, похоже я ошибся, TheExpert был прав. В C++ тоже ошибку выдаёт в аналогичной ситуации.
TheExpert всегда прав. В редких случаях общения с Integer возможны исключения.
TheExpert всегда прав. В редких случаях общения с Integer возможны исключения.
Судья Дред)
Тут проблема в том, что long[] и long не считаются разными типами (не говоря уже о long[][] и т.п.). Поэтому компилятор "не знает", что это массив и что он не приводится.
Набросайте схему приведения типов и народ к Вам потянется. Главное помнить: сначала прямое преобразование, после - обратное, если оно возможно.
Судья Дред)
Не переживай так.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Билд 1966, 64 бит. В данном примере компилятор выдаёт ошибку о неоднозначности, хотя тут всё однозначно, ведь массив long[] не может преобразовываться в int[].
p.s. Я ошибся. Ложная тревога.