class A { public:
template<typename T> void f( T t );
template<typename T> staticvoid g( T t );
};
template<typename T> void A::f( T t ) {}
template<typename T> void A::g( T t ) {}
voidOnStart()
{
A a;
a.f( 1 ); //нормально
A::g( 1 ); //'g<int>' - access to non-static member or function
}
class A { public:
A *operator ++() { return &this; }
};
template<typename T> void f( T t ) {}
void g( A *a )
{
f( ++a ); //'A' - declaration without type (1)
f( a.operator++()); //нормально (2)
}
class A { public:
A *operator <<( int ) { return &this; }
};
template<typename T> void f( T* t ) {}
void g( A* a )
{
f( a << 1 ); //'A' - declaration without type
}
#property libraryclass A { public:
template<typename T> int f( T a, int b, bool c = false );
};
template<typename T>
int A::f( T a, int b, bool c ) { return0; }
class B : public A {
virtualvoid g();
};
void B::g()
{
f( 0, 0, false ); //нормально
f( 0, 0 ); //tree optimization error
}
class C {};
void start( C* ) export {}
为什么在使用定型器时,会出现 "垃圾"?
编译错误(构建1327)。
编译错误
编译错误
特别注意--如果你把(!)行(1)和(2)调换一下就好了,这需要额外的检查编译错误
我想特别指出,如果你把(!)行(1)和(2)对调,一切都很好,这需要额外检查我是否正确地理解了f(++a)和f(a++)在你的样本中造成f的不同变体?
不,这是一个编译错误--即还没有到执行的时候(具体调用)。从代码的角度来看,字符串(1)和(2)是等价的(对同一事物的不同书写)。
下面是另一个例子,这样我就不会觉得这只是关于++运算符的问题了。
第(1)行和第(2)行在代码方面是等同的(同一事物的不同写法)。
++a和a++毕竟在意义上是不同的。你不觉得吗?
编译错误: 树形优化错误
由于"树状优化错误 "不容易定位,我要求开发人员(如果他们有这种可能性)将所有的优化放到优化键中(感谢上帝,它存在),否则即使禁用了优化,工作程序在构建升级后也会变成完全禁用(而且不可能恢复)。
请注意,今天所有的错误都不是旧的,而是新的--在之前 (Build 1241),一切都正常。没有A++
对。这就是为什么我把它说得更具体。
在你的例子中,f(++a)和f(a++) 造成f的不同变体,我的理解是否正确?