int main ()
{
int a = 5,b = 2;
printf("%d",a+++++b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码提供以下错误:
错误:需要左值作为递增操作数
但是,如果我把整个空间a++ +和++b,然后正常工作.
int main ()
{
int a = 5,b = 2;
printf("%d",a++ + ++b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个例子中的错误是什么意思?
template <int>
using A = int;
void f(A<0>=0); // Attempting to declare a function f taking int,
// with the default argument 0
// Works as expected:
// void f(A<0> = 0);
Run Code Online (Sandbox Code Playgroud)
这既不适用于GCC 4.9.2也不适用于Clang 3.5 - 更不用说ICC或VC++了.显然,该>=位被解析为大于或等于运算符.但是,对于[temp.names]/3,这似乎是不正确的:
名称查找(3.4)后发现名称是模板名称或者operator-function-id或literal-operator-id引用一组重载函数,其中任何成员都是函数模板,如果遵循此函数通过a
<,<始终将其视为template-argument-list的分隔符,而不是less-than运算符. 在解析模板参数列表时,第一个非嵌套>138被视为结束分隔符而不是大于运算符.[..] [ 例如:Run Code Online (Sandbox Code Playgroud)template<int i> class X { /* ...*/ }; X< 1>2 > x1; // syntax error X<(1>2)> x2; // …