エラー、バグ、質問 - ページ 1569

 
Ruslan Khasanov:
スタイラー 使用時に「ゴミ」が表示されるのはなぜですか?
また、なぜそれを使うのですか?))
 

コンパイルエラー(ビルド1327)

class A { 
public:
        bool operator++( int ) { return false; }
};

void OnStart()
{
        A a;
        while ( a++ ); //'++' - illegal operation use
}
 

コンパイルエラー

class A { public:
template<typename T>        void f( T t );
template<typename T> static void g( T t );
}; 
template<typename T> void A::f( T t ) {}
template<typename T> void A::g( T t ) {}

void OnStart()
{
        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)
}
特記事項 - (1)行と(2)行を入れ替えれば問題ないので、追加でチェックが必要です
 
A100:

コンパイルエラー

特に注意したいのは、(1)と(2)の行を入れ替えれば(!?)すべてうまくいくので、追加のチェックが必要です
あなたの例では、f(++a)とf(a++)は異なる変形を引き起こすという理解で正しいですか?
 
Anton Zverev:
あなたのサンプルでは、f(++a)とf(a++)は異なるfの変種を引き起こすという理解で正しいですか?

いいえ、これはコンパイルエラー です。つまり、まだ実行(具体的な呼び出し)には至っていないのです。文字列(1)と(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
}
 
A100:

(1)行と(2)行は、コード的には同等(同じものを異なる書き方)である

とはいえ、++aとa++は意味が違う。そう思いませんか?
 
Anton Zverev:
++aとa++は、結局のところ、意味が違う。そう思いませんか?
a++はありません
 

コンパイルエラー: ツリー最適化エラー

#property library

class 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 ) { return 0; }

class B : public A {
        virtual void g();
};
void B::g()
{
        f( 0, 0, false ); //нормально
        f( 0, 0 );        //tree optimization error
}

class C {};
void start( C* ) export {}

ツリー最適化エラー」はローカライズが難しいので、開発者に(もしそのような可能性があるなら)すべての最適化を最適化キーに入れるようお願いします(それがあることに感謝します)、さもなければ最適化を無効にしたプログラムでもビルドアップ後に完全に無効になります(そして元に戻すことは不可能 です)。

なお、今日のエラーはすべて古いものではなく新しいもので、以前 (ビルド1241)はすべてうまくいって いました。
 
A100:
a++がない

そうですね。というわけで指定しました。

アントン・ズベレフ
あなたの例では、f(++a)とf(a++)は異なる変形を引き起こすという理解で正しいですか?