Есть несколько вопросов о времени жизни постоянной ссылки на SO, но все же я не понимаю.
Является ли этот фрагмент кода действительным?
struct S
{
const int &ref;
S( const int &x ) : ref(x) { }
};
int main( )
{
S s( 0 );
// ...
use( s.ref );
// ...
return 0;
}
Интуитивно я быскажем «нет», поскольку 0
должно истечь после того, как выражение (S s(0);
) будет оценено.
Однако и GCC, и CLANG скомпилируют его нормально, без предупреждений, и valgrind не обнаружит ошибок времени выполнения.
Что мне не хватает в ссылках?