我有一个非常简单的模板函数来比较两个structs
的rank
字段
template<typename T>
bool comp_rank(const T &a, const T &b){
return a.rank < b.rank;
}
这工作得很好,直到我用-std=c++11
编译。现在,我得到了错误
error: parameter "b" is not a type name
return a.rank < b.rank;
^
./src/util.h(123): error: expected a ">"
return a.rank < b.rank;
^
怎么回事?这看起来像是基本的语法,在C++11之后我会惊讶地发现它已经改变了。
发布于 2018-12-11 03:54:28
你的问题是你使用
using namespace std;
因为c++11引入了模板rank
查看此处:https://en.cppreference.com/w/cpp/types/rank
如果您删除了using
语句,一切都会再次正常编译!
这是由gcc 8.2.1给出的错误消息
main.cpp: In function 'bool comp_rank(const T&, const T&)':
main.cpp:41:23: error: type/value mismatch at argument 1 in template parameter list for 'template<class> struct std::rank'
return a.rank < b.rank;
无论如何,使用using namespace ...
都不是一个好主意。您已经举了一个很好的例子;)
https://stackoverflow.com/questions/53712642
复制相似问题