2009-12-03 5 views
2

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

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

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

Компилятор VS2008 дает следующую информацию: cannot deduce template argument as function argument is ambiguous.

+3

Какая ошибка вы получаете? – Glen

+0

не может вывести аргумент шаблона как аргумент функции неоднозначным –

+3

Downvote? Почему downvote? –

ответ

6

Я думаю, что проблема в том, что 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

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

Смежные вопросы