私の環境(Windows 7, MinGW64 g++ 8.1.0)で-O1, -O2ではコンパイルが通るのに-O0では通らないコードを、見つけてしまいました(エラーメッセージ後述)
ところでいい加減 Windows 7 使うのやめた方がいい ? 私もそう思います
# include <iostream>
struct A {
void fuga() const {
std::cerr << "fuga~~" << std::endl;
}
};
struct B {
static const A a;
void hoge() {
a.fuga();
}
};
int main() {
B a;
a.hoge();
return 0;
}
-O0でのエラーメッセージ
C:\...\cc15Jtni.o:b.cpp:(.rdata$.refptr._ZN1B1aE[.refptr._ZN1B1aE]+0x0): undefined reference to `B::a'
collect2.exe: error: ld returned 1 exit status
本当はダメだけど最適化によってリンク直前のコードにおけるstatic const A a
への参照が消え失せたのかな
「最適化オプション変えたら***が起きた」シリーズとして...