Я только что обнаружил довольно опасную ошибку в своем коде, и я чувствую, что она должна была быть обнаружена компилятором.Я ошибся?По сути, ссылочный член класса может быть инициализирован сам в конструкторе.Вот тестовый код, который компилируется в Visual Studio 2017 без ошибок и предупреждений:
struct foo
{
foo() : reference(reference) {}
int& reference;
};
int main()
{
foo fooOb;
}
ОБНОВЛЕНИЕ: я вижу, что здесь есть аналогичный вопрос 2009 года.Другие компиляторы ведут себя так же в 2017 году, или это проблема VS 2017?Если они это сделают, это как бы подсказывает мне, что это законный C ++, но я не понимаю, как это могло быть.