読者です 読者をやめる 読者になる 読者になる

一時オブジェクトを参照できてしまう言語拡張をOFFにする

VC++

VC++ではデフォルト設定では一時オブジェクトを参照できてしまいます。

class A {};

void foo(A&) {}

int main()
{
    foo(A()); // エラーになってほしいけどコンパイルが通ってしまう
}

複数環境(GCCとか)で動かしたいコードを書いてるときには
この言語拡張はない方がうれしいです。
(混乱の元なのでなくしてほしい)



以下の手順で、VC++の言語拡張をOFFにできます。


「プロジェクトのプロパティ(Alt + F7)」
 ↓
「構成プロパティ」
 ↓
C/C++
 ↓
「言語」
 ↓
「言語拡張を無効にする」オプションを「はい(/Za)」にする

class A {};

void foo(A&) {}

int main()
{
    foo(A()); // エラー!AをA&に変換できません
}