我将参数包中的数组定义为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();
}
答案 0 :(得分:1)
您正尝试将引用传递给dims
作为模板参数。由于dims
不是static
变量,因此此引用不是常量表达式。
您可以通过dims
static
变量来解决此问题:
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();
};
};