2017-09-08 14 views
1

私はconstexprとしてパラメータパックから配列を定義します。次に、この配列をテンプレート引数として別のテンプレートに渡したいと思います。しかし、私は外部リンケージエラーが発生します。ここでの問題は何ですか?私はconstexprがテンプレートパラメータとして簡単に転送できると思った。非型パラメータパックからテンプレート引数としてconstexpr配列を渡すことができません

// Example program 
#include <array> 
#include <iostream> 
#include <string> 


template <size_t X> 
using iMat1D = std::array<size_t, X>; 

template <size_t SizeOfDims, const iMat1D<SizeOfDims> &DIMs> 
struct test{ 
    static void run() { 
    } 
}; 

template <std::size_t... DIMS> 
struct solver_walker { 
    static void run() { 
    constexpr std::size_t N = sizeof...(DIMS); 
    constexpr std::array<size_t, N> dims = {{DIMS...}}; 
    test<N, dims>::run(); 
    }; 
}; 

int main() 
{ 
    solver_walker<1,2,3,4>::run(); 
} 

答えて

1

あなたはテンプレート引数としてdimsから参照を渡そうとしています。 dimsstatic変数ではないため、この参照は定数式ではありません。

template <std::size_t... DIMS> 
struct solver_walker { 
    static void run() { 
    constexpr std::size_t N = sizeof...(DIMS); 
    static constexpr std::array<size_t, N> dims = {{DIMS...}}; 
    test<N, dims>::run(); 
    }; 
}; 

live example on wandbox

あなたがstatic変数dimsを作ることによって、この問題を解決することができます

関連する問題