Совокупный эталонный член и временный срок службы

Учитывая этот пример кода, каковы правила, касающиеся времени жизни временной строки, передаваемой вS.

struct S
{
    // [1] S(const std::string& str) : str_{str} {}
    // [2] S(S&& other) : str_{std::move(other).str} {}

    const std::string& str_;
};

S a{"foo"}; // direct-initialization

auto b = S{"bar"}; // copy-initialization with rvalue

std::string foobar{"foobar"};
auto c = S{foobar}; // copy-initialization with lvalue

const std::string& baz = "baz";
auto d = S{baz}; // copy-initialization with lvalue-ref to temporary

Согласно стандарту:

N4140 12,2 p5.1 (удалено в N4296)

Временная привязка к элементу ссылки в конструкторе ctor-initializer (12.6.2) сохраняется до выхода из конструктора.

N4296 12.6.2 p8

Временное выражение, привязанное к элементу ссылки в mem-initializer, неверно сформировано.

Таким образом, имея пользовательский конструктор, как[1] это определенно не то, что мы хотим. Он даже должен быть плохо сформирован в последней версии C ++ 14 (или это так?), Ни gcc, ни clang не предупредили об этом.
Меняется ли это при прямой инициализации агрегата? Похоже, в таком случае временная жизнь продлевается.

Теперь что касается копирования-инициализации,Конструктор перемещения по умолчанию и ссылочные элементы говорится, что[2] неявно генерируется. Учитывая тот факт, что перемещение может быть исключено, применяется ли то же правило к неявно сгенерированному конструктору перемещения?

Какой изa, b, c, d имеет действительную ссылку?