このコードの場合
struct test {};
test f() { return test(); }
void print(test *x) {}
int main()
{
print(&f());
print(&test());
}
gcc-4.6は、2つの「一時的な[-fpermissive]のアドレスの取得」エラーを発行します。これは4.6で導入され、gcc-4.5でコンパイルできました。
その理由はかなり明確で、十分に文書化されています。問題は、それがレガシーコードであり、コンパイルするには、それを機能させる必要があることです。したがって、ファイルやコードの一部の周りで#pragmasを実行して、-fpermissiveでコンパイルします。たとえば、顧客が既存のコードを変更しないことを固く決心しているとします(つまり、&f()または&test()を使用してprint()を呼び出すという事実は、一般的なソースファイルではなく変更できません)。言い換えれば、これは何らかの方法でコンパイルされ、唯一の選択肢は多かれ少なかれ苦痛です。
だから問題は-多くの場所で-fpermissiveを実行せずにそれを機能させるための可能な回避策はありますか?-Wフラグ、C++トリックなど。