Почему компилятор генерирует ошибку? - PullRequest
2 голосов
/ 03 декабря 2009

Почему компилятор генерирует ошибку?

template<class T>
void ignore (const T &) {}

void f() {
   ignore(std::endl);
}

Компилятор VS2008 выдает следующую ошибку: cannot deduce template argument as function argument is ambiguous.

Ответы [ 3 ]

6 голосов
/ 03 декабря 2009

Мне кажется, проблема в том, что std::endl является функцией шаблона, и компилятор не может вывести аргумент шаблона для функции ignore.

template <class charT, class traits>
  basic_ostream<charT,traits>& endl ( basic_ostream<charT,traits>& os );

Чтобы исправить проблему, вы можете написать что-то вроде следующего:

void f() {
   ignore(std::endl<char, std::char_traits<char>>);
}

Но вы должны знать, что вы передадите указатель на функцию в качестве аргумента, а не результат выполнения функции.

2 голосов
/ 03 декабря 2009

std :: endl - это шаблон функции. См. аналогичный вопрос для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...