C++ 如果返回值未分配给变量,则未解析函数重载
我编写了一个模板函数C++ 如果返回值未分配给变量,则未解析函数重载,c++,templates,C++,Templates,我编写了一个模板函数foo,它返回一个std::string auto s = foo(...) << std::endl; std::cout << s << std::endl; auto s=foo(…)您有一个输入错误。换行- std::cout << (foo(v.begin())) << std::end; std::coutstd::cout #include <iostream> #include <
foo
,它返回一个std::string
auto s = foo(...) << std::endl;
std::cout << s << std::endl;
auto s=foo(…)您有一个输入错误。换行-
std::cout << (foo(v.begin())) << std::end;
std::coutstd::cout
#include <iostream>
#include <string>
#include <iterator>
#include <vector>
#include <type_traits>
// checks if It is an iterator type
template<typename It, typename Base = std::input_iterator_tag>
struct is_iterator : public std::is_base_of<Base, typename std::iterator_traits<It>::iterator_category> {};
// dummy function that takes in iterator
template<typename It, typename = typename std::enable_if_t<is_iterator<It>::value>>
std::string foo(It it) { return "foo it"; }
int main() {
std::vector<int> v{1};
// works
auto s = foo(v.begin());
std::cout << s << std::endl;
// doesn't
std::cout << (foo(v.begin())) << std::end;
}
std::cout << (foo(v.begin())) << std::end;
std::cout << (foo(v.begin())) << std::endl;