Что такое синтаксис автоматического списка в квадратных скобках?

WF. дал теперь удаленный ответ на мой вопрос здесь, где использовалась строка:

auto [x, y] = div_t{ 1, 0 };

Судя по коду в ответе, это похоже на tie для структуры div_t. Я надеялся, что кто-нибудь сможет объяснить, что здесь происходит. Полный код функции был следующим:

constexpr bool first_quot() {
    auto [x, y] = std::div_t{1, 0};
    (void)y;
    return x;
}

person Jonathan Mee    schedule 10.01.2017    source источник
comment
@Someprogrammerdude не совсем так, как tie, поскольку на самом деле это объявление переменных x, y и std::tie связывает ссылки на уже существующие переменные, и я не уверен, что tie может связать эти переменные со структурой - насколько я знаю, он может только связать эти переменные до std::tuple элементов. Или я ошибаюсь?   -  person W.F.    schedule 10.01.2017
comment
@В.Ф. Обновил свой комментарий. И вы правы в том, что std::tie может обрабатывать только std::tuple (или std::pair, потому что это то, что обрабатывает оператор присваивания std::tuple, а std::tie возвращает std::tuple).   -  person Some programmer dude    schedule 10.01.2017
comment
О, еще одна вещь;) на самом деле мой ответ был неправильным с использованием привязки структуры... мой ответ должен больше выглядеть как constexpr bool first_quot() { return std::div_t{1, 0}.quot; } (так что С++ 17 даже не нужен), чтобы работать в соответствии с моим намерением :) Но поскольку он все равно удален, я не редактировал :)   -  person W.F.    schedule 10.01.2017
comment
@В.Ф. Причина, по которой я был взволнован вашим ответом, заключалась в том, что я понял, что он использует constexpr, если так, я действительно мог бы использовать это для выбора оператора generate, который я выполнил, что позволило мне использовать инициализацию фигурной скобки, которую я пытался выполнить в первом место.   -  person Jonathan Mee    schedule 10.01.2017
comment
@Someprogrammerdude Есть ли шанс, что я смогу убедить вас найти эту информацию и ввести ее в качестве ответа? Когда я смотрю auto, я не вижу в этом потенциального синтаксиса. Я уверен, что хотел бы иметь возможность прочитать и понять, что здесь происходит.   -  person Jonathan Mee    schedule 10.01.2017
comment
Я видел его на cppreference, но сейчас не могу найти. :/   -  person Some programmer dude    schedule 10.01.2017
comment
@JonathanMee Я рад, что это было полезно :)   -  person W.F.    schedule 10.01.2017
comment
Теперь, когда я знаю фактические термины в спецификации, я нахожу ссылки везде, включая на cppreference... :)   -  person Some programmer dude    schedule 10.01.2017
comment
@В.Ф. Итак, в чем смысл (void)y только для предотвращения предупреждений о неиспользуемых переменных?   -  person Jonathan Mee    schedule 10.01.2017
comment
@JonathanMee точно. К сожалению, я не думаю, что вы можете использовать привязку структуры (или как она сейчас называется) с безымянной переменной...   -  person W.F.    schedule 10.01.2017
comment
@В.Ф. Я нашел способ написать вспомогательную функцию C++11 без прямого назначения члена! Проверьте это: stackoverflow.com/a/41592619/2642059 Я очень взволнован, за исключением того факта, что это не не работает в Visual Studio :(   -  person Jonathan Mee    schedule 11.01.2017


Ответы (1)


В самом последнем черновике C++17 спецификации, он называется «Объявления декомпозиции» и определен в разделе 8.5 [dcl.decomp].

person Some programmer dude    schedule 10.01.2017