Re[3]: error C2784: could not deduce template argument
От: Кодт Россия  
Дата: 15.10.15 10:46
Оценка: +1
Здравствуйте, collider, Вы писали:

C>ведь угадывает же компилятор


Компилятор не угадывает, а выбирает наилучшую сигнатуру, выполняя строго ограниченный набор преобразований.
Глубина прозрения компилятора — ровно в один шаг. А здесь два шага: подобрать параметр шаблона и выполнить приведение типа конструктором.

Причём вывод параметра шаблона из зависимости — вообще никогда не делается.

Пример, почему авторы стандарта не стали морочить головы разработчикам компиляторов
template<class T> struct foo {
  foo(T) {}
};
template<> struct foo<char> {
  foo(int) {}
};
template<class T> struct foo<T*> {
  foo(T) {}
};

template<class T> void bar(foo<T> t) {}

int main() {
  bar(123); // foo<int>, foo<char>, foo<int*> ?
}

Это тебе не ML и Haskell, где система типов позволяет решать уравнения на любую глубину в любую сторону.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.