Re[4]: error C2784: could not deduce template argument
От: collider  
Дата: 15.10.15 11:55
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 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, где система типов позволяет решать уравнения на любую глубину в любую сторону.

Я и не говорю, что компилятор прям должен... Я хотел узнать, если ли какой финт ушами.
Пример ваш не корректен,конечно foo<int>.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.