Есть ли причина (кроме , потому что стандарт так говорит ), почему следующий код не разрешен?
struct Foo
{
~Foo() && {}
~Foo() & {}
};
Я знаю, что это незаконно, но я хочу знаю, почему.
Я думал о старой доброй проблеме избегать безымянных экземпляров , т. е. при использовании объектов защиты, таких как:
void do_something()
{
std::lock_guard{my_mutex};
// some synchronized operation
}
Это юридический код, но, очевидно, подвержен ошибкам, так как защита замка будет уничтожена сразу после ее создания, потому что это временный (неназванный) объект.
Я планировал сделать что-то подобное
struct Foo
{
~Foo() && = delete;
~Foo() & = default;
};
и получить компилятор ошибка, если тип построен как временный.