У меня сложилось впечатление, что все в C ++ должно быть объявлено перед использованием.
На самом деле, я помню, что читал, что это причина , почему использование auto
в возвращаемых типах недопустимо в C ++ 0x без чего-то вроде decltype
: компилятор должен знать объявленный введите перед вычислением тела функции.
Вообразите мое удивление, когда я заметил (спустя долгое время), что следующий код на самом деле совершенно легален:
[Редактировать: измененный пример.]
class Foo
{
Foo(int x = y);
static const int y = 5;
};
Так что теперь я не понимаю:
Почему компилятор не требует предварительного объявления внутри классов, когда он требует их в других местах?