2

[]の要素にアクセスできるように、演算子をオーバーロードしようとしていますstd::tuple。何らかの理由で、次のエラーが発生します。

prog.cpp:11:73: エラー: 関数本体の外側でパラメーター 'N' を使用しています
prog.cpp:11:73: エラー: 関数本体の外側でパラメーター 'N' を使用しています
prog.cpp:11:73: エラー: の使用パラメータ 'N' 外部関数本体
prog.cpp:11:89: エラー: テンプレート引数 1 が無効です

それらのほとんどが最初の繰り返しであるため、かなり奇妙です。そして、なぜそのエラーが発生するのかわかりません。なぜなら、戻り値の型を遅くすることの全体的なポイントは、戻り値の型にパラメーターを使用できるからではないでしょうか?

#include <tuple>

template <class... Args>
struct type_list
{
    std::tuple<Args...> var;

    type_list(Args&&... args) : var(std::forward<Args>(args)...) {}

    auto operator[](std::size_t const N) -> typename std::tuple_element<N, std::tuple<Args...>>::type&&
    {
        return std::get<N>(var);
    }
};

int main()
{
    type_list<int, int, bool> array(2, 4, true);
}

なぜこれが起こっているのか、どうすればこれを機能させることができるのかを誰かが説明できれば、非常にありがたいです。ありがとう。

4

2 に答える 2