【发布时间】:2014-08-17 15:02:53
【问题描述】:
我有这样的代码,用“g++ -Wall -g -std=c++11 test.cpp”编译,由于错误:预期的primary-expression before')'标记而无法编译
#include <functional>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> vec;
for(int i=0;i<10;++i)
{
vec.push_back(i);
}
std::sort(vec.begin(),vec.end(),std::less<int>); //should be std::less<int>()
}
但是标准说:
primary-expression:
literal
this
( expression )
id-expression
lambda-expression
id-expression:
unqualified-id
qualified-id
unqualified-id:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~ class-name
~ decltype-specifier
template-id
template-id
simple-template-id
simple-template-id
template-name <template-argument-list>
看来 std::less 是一个模板 ID,所以它是一个主表达式。
【问题讨论】:
-
你使用的是哪个编译器?
-
FWIW, Clang: error: expected '(' for function-style cast or type construction
-
@MantoshKumar,可能是 GCC。 4.9 给出了错误。
-
嗯,看起来 Clang 编译错误消息中存在问题。我在 VS2010 中运行相同的程序并得到以下“错误 C2275:'std::less<_ty>':非法使用这种类型作为表达式”。
-
@MantoshKumar,Clang 错误没有任何问题。它基本上是在说“你有一半这种类型的表达,但你缺少另一半”。