嵌套的Initializer_list模板作为函数参数

时间:2018-03-14 05:42:55

标签: c++ templates

首先,我有以下定义:

const int N = 100000;
int A[N];
#pragma omp parallel for
for (int i = 0; i < N; i++) {
    A[i] = i;
}

我有静态断言成功:

template<class T, int N = 1>
struct Wrap { typedef initializer_list<typename Wrap<T, N - 1>::Value> Value; };

template<class T>
struct Wrap<T> { typedef initializer_list<T> Value; };

template<class T, int N = 1>
using List = typename Wrap<T, N>::Value;

这意味着static_assert(is_same<List<int>, initializer_list<int>>::value); 应与List<int>的类型相同。

我有测试课:

initializer_list<int>

但是当我打电话时:

template<int N>
class Test {
public:
    template<class T>
    static void check(const List<T, N> &list) { }
};

存在编译错误:

Test<1>::check({1, 2, 3, 4});

但如果我将No matching function for call to 'Test<1>::check(<brace-enclosed initializer list>)' 更改为:

check

以上电话

template<class T>
static void check(const initializer_list<T> &list) { }

编译成功。

Test<1>::check({1, 2, 3, 4}); List<int>不应该是同一类型吗?

0 个答案:

没有答案