Skip to content

「構造化束縛でパックを導入できるようにする」のサンプルコードがエラーになる #1456

@Raclamusi

Description

@Raclamusi

構造化束縛でパックを導入できるようにする」のページの「std::apply()の実装改善」のサンプルコードで、以下の2点が気になります。

  1. std::forward_like() に第2テンプレート引数を渡しており、コンパイルエラーになる
  2. 1.を直したとしても、参照を持つタプルを渡すが考慮されておらず、 std::tuple<std::string&>&& などを渡した時に要素の参照先がムーブされてしまう( std::apply() と異なる動作)
template <class F, class Tuple>
constexpr decltype(auto) apply(F &&f, Tuple &&t)
{
  auto&& [...elems] = t;
  return std::invoke(std::forward<F>(f),
        std::forward_like<Tuple, decltype(elems)>(elems)...);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions