首先,我有以下定义:
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>
不应该是同一类型吗?