#include <iostream>
struct A {
A();
const int& i;
};
A::A() : i(123) {}
int main() {
A a;
std::cout << a.i << std::endl;
}
и#include <iostream>
struct A {
A() : i(123) {}
const int& i;
};
int main() {
A a;
std::cout << a.i << std::endl;
}
Будучи скомпилированными компилятором от Sun или GCC, эти два примера печатают разные результаты. И первый - неправильный. Студия же 2010, с настройками по умолчанию, дает предупреждение и генерирует код, работающий правильно (точнее, как ожидает программист) в обоих случаях.
Понятно, что код сам по себе несколько странный, так как сложно представить себе, кому может понадобиться инициализировать ссылку константой, которая передается в конструктор не извне, а создается временно во время обработки списка инициализации. Но вот на ошибку-опечатку вполне себе потянет.
Ко мне пример попал как результат анализа реального бага.