Что прискорбно в конструкции, приведенной в следующем примере? - PullRequest
0 голосов
/ 03 сентября 2018

Раздел "15.6.2 Инициализация баз и элементов" (N4713) имеет следующий пример после пункта 11:

struct A {
    A() = default; // OK
    A(int v) : v(v) { } // OK
    const int& v = 42; // OK
};
A a1; // error: ill-formed binding of temporary to reference
A a2(1); // OK, unfortunately

Что такое неудачное в конструкции в последней строке примера?

Я искал всю ссылку на другие случаи "неудачного" поведения, которые были разрешены, но я не мог найти ни одного.

Если бы это было неудачно в этом конкретном контексте, не могло ли это быть сделано незаконным?

1 Ответ

0 голосов
/ 03 сентября 2018

В обоих случаях A::v - это свисающая ссылка (временная от 42 или параметр v конструктора).

Наличие ссылки на временное (даже с увеличенным сроком службы) может быть законным и правильно использоваться в некоторых случаях.

Трудно обнаружить все случаи неправильного использования, чтобы запретить их.

...