相关疑难解决方法(0)

意外的非常量std :: initializer_list

我正在玩索引技巧,看​​看我可以去哪里,并遇到一个奇怪的错误...首先,简单的不那么老的指数:

template<std::size_t...>
struct indices {};

template<std::size_t N, std::size_t... Indices>
struct make_indices:
    make_indices<N-1, N-1, Indices...>
{};

template<std::size_t... Indices>
struct make_indices<0, Indices...>:
    indices<Indices...>
{};
Run Code Online (Sandbox Code Playgroud)

我创建了一个从a派生的编译时数组类std::initializer_list,并使其具有可索引性(假设N3471支持您的编译器.无论如何它将在下一个标准中).这里是:

template<typename T>
struct array:
    public std::initializer_list<T>
{
    constexpr array(std::initializer_list<T> values):
        std::initializer_list<T>(values)
    {}

    constexpr auto operator[](std::size_t n)
        -> T
    {
        return this->begin()[n];
    }
};
Run Code Online (Sandbox Code Playgroud)

所以,我尝试创建一个函数,array在每个成员添加1后返回一个副本:

template<typename T, std::size_t... I>
auto constexpr add_one(const array<T>& a, indices<I...>)
    -> const array<T>
{
    return { (a[I]+1)... };
}
Run Code Online (Sandbox Code Playgroud)

并完成代码,这是我的主要:

int main()
{
    constexpr array<int> a = …
Run Code Online (Sandbox Code Playgroud)

c++ compile-time initializer-list variadic-templates c++11

8
推荐指数
1
解决办法
1266
查看次数